2010-11-30 8 views
7

Tengo una matriz y quiero averiguar si hay al menos un valor falso en ella. Estaba pensando en crear una función array_and(), que solo realiza un Y lógico en todos los elementos. Volvería a ser verdadero si todos los valores son verdaderos, de lo contrario falso. ¿Estoy sobreingeniería?Matriz AND()? Logical ANDing de todos los elementos

+4

Eso es una operación perfectamente válida para hacerlo, y si PHP no lo tiene incorporado, puede hacerlo fácilmente con 'array_reduce' (o' fold', ya que esta función de orden superior se llama más comúnmente). – delnan

+2

@delnan: Esto requiere iteración en toda la matriz, sin embargo, independientemente de si incluso contiene un 'verdadero', y mucho menos si se encuentra un' falso' antes del final de la matriz. –

+0

@Will: Sí, lástima de mí: X – delnan

Respuesta

11

¿Por qué no sólo tiene que utilizar

  • in_array - Comprueba si existe un valor en una matriz

Ejemplo:

// creates an array with 10 booleans having the value true. 
$array = array_fill(0, 10, TRUE); 

// checking if it contains a boolean false 
var_dump(in_array(FALSE, $array, TRUE)); // FALSE 

// adding a boolean with the value false to the array 
$array[] = FALSE; 

// checking if it contains a boolean false now 
var_dump(in_array(FALSE, $array, TRUE)); // TRUE 
+0

Gracias, sabía que estaba pensando demasiado :) – user151841

+0

@usuario solo para aclarar: por "valor falso" en realidad quieres decir que quieres comprobar si hay un * booleano falso * en la matriz, ¿verdad? – Gordon

+0

Sí, esta es una situación en la que sería booleana 'FALSE', ¿pero se puede generalizar a la verificación de tipos sueltos de PHP? Para la verificación de tipo suelto, tendría que usar una función, ¿no? – user151841

1

No hay nada malo con esto, en principio, siempre como no lo haces Y todos los valores indiscriminadamente; es decir, que debe terminar tan pronto como el primer false se encuentra:

function array_and(array $array) 
{ 
    foreach ($array as $value) 
    { 
     if (!$value) 
     { 
      return false; 
     } 
    } 

    return true; 
} 
3

volvería cierto si todos los valores son verdaderos, de lo contrario falso.

devuelve verdadero si la matriz es no vacía y no contiene elementos falsos:

function array_and(arary $arr) 
{ 
    return $arr && array_reduce($arr, function($a, $b) { return $a && $b; }, true)); 
} 

(. Tenga en cuenta que se necesita comparación estricta si quería probar contra el tipo false)

¿Estoy sobre-ingeniería?

Sí, porque se puede utilizar:

in_array(false, $arr, true); 
0

que debe ser capaz de aplicar una pequeña función que toma una matriz y se itera sobre cada miembro de comprobación para ver si es falsa. Devolver un bool de la función basada en el resultado de su visita ....

0

Fácil, pero fea => O (N)

$a = array(1, 2, false, 5, 6, 'a'); 

$_there_is_a_false = false 
foreach ($a as $b) { 
    $_there_is_a_false = !$b ? true : $_there_is_a_false; 
} 

otra opción: array-filter

0

Por qué no sólo tiene que utilizar array_product()

$ set = array (1,1,1,1,0,0);

$ result = array_product ($ set);

de salida: 0

Y lógico es esencialmente un multiplicador.

1 * 1 = 1

1 * 0 = 0

0 * 1 = 0

0 * 0 = 0

Cuestiones relacionadas