2010-11-30 4 views
7

Ich habe ein Array und möchte herausfinden, ob es mindestens einen falschen Wert gibt. Ich dachte daran, eine array_and()-Funktion zu erstellen, die nur ein logisches UND auf allen Elementen ausführt. Es würde true zurückgeben, wenn alle Werte wahr sind, andernfalls false. Übertreibe ich?Array UND()? Logische UND-Verknüpfung aller Elemente

+4

Das ist eine absolut gültige Operation ist zu tun, und wenn PHP Es ist nicht eingebaut, Sie können es einfach mit 'array_reduce' (oder' fold' machen, da diese höherwertige Funktion häufiger aufgerufen wird). – delnan

+2

@delnan: Dies erfordert eine Iteration über das gesamte Array, unabhängig davon, ob es sogar ein 'true' enthält, geschweige denn, ob vor dem Ende des Arrays ein' false' auftritt. –

+0

@Will: Ja, Schande über mich: X – delnan

Antwort

11

Warum nicht Sie verwenden nur

  • in_array - Prüfen, ob ein Wert in einem Array existiert

Beispiel:

// 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

Danke, ich wusste, ich dachte zu viel :) – user151841

+0

@Benutzer nur um zu verdeutlichen: mit "false value" meinst du eigentlich, du willst überprüfen, ob da ein * boolean false * drin ist das Array, oder? – Gordon

+0

Ja, das ist eine Situation, in der es boolesche 'FALSE' wäre, aber ist dies verallgemeinerbar auf PHP's losen Typprüfung? Für die losen Typprüfungen müsste ich eine Funktion verwenden, nein? – user151841

1

Es ist nichts falsch mit diesem im Prinzip so lange wie Sie UND alle Werte nicht wahllos; das heißt, sollten Sie so bald enden, wie der erste false gefunden:

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

    return true; 
} 
3

Es ist wahr zurückkehren würde, wenn alle Werte wahr sind, andernfalls false.

Gibt true zurück, wenn Array nicht leer ist, und enthält keine falschen Elemente:

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

(. Beachten Sie, dass Sie strengen Vergleich benötigen würden, wenn Sie gegen den false Typ testen wollte)

Übertreibe ich?

Ja, denn Sie nutzen könnten:

in_array(false, $arr, true); 
0

der Lage sein, sollten Sie eine kleine Funktion, die ein Array und durchläuft es dauert zu implementieren jedes Mitglied zu überprüfen, ob es falsch ist. Gibt einen Bool aus der Funktion basierend auf dem Ergebnis Ihrer überprüfen ....

0

Einfach aber hässlich => 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; 
} 

eine weitere Option: array-filter

0

Warum nicht einfach verwenden array_product()

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

$ result = array_product ($ set);

Ausgang: 0

UND Logik ist im Wesentlichen ein Multiplikator.

1 * 1 = 1

1 * 0 = 0

0 * 1 = 0

0 * 0 = 0

Verwandte Themen