2013-02-12 7 views
7
$array = array(
    'vegs' => 'tomatos', 
    'cheese' => false, 
    'nuts' => 765, 
    '' => null, 
    'fruits' => 'apples' 
); 

var_dump(in_array(false, $array, true)); //returns true because there is a false value 

Wie streng zu prüfen, ob es mindestens ein nicht-false (string, true, int) Wert in Array nur oder irgendetwas mit in_array ist aber nicht foreach?in_array prüfen für nicht falsche Werte

var_dump(in_array(!false, $array, true)); //this checks only for boolean true values 

var_dump(!in_array(false, $array, true)); //this returns true when all values are non-false 
+3

Warum beschränken Sie sich(), um in_array nur; Dies ist eine perfekte Verwendung für array_reduce() –

+0

alles andere als nicht foreach – ihtus

Antwort

7

Tatsächliche Lösung unter

Einfach die Negation an der richtigen Stelle:

var_dump(!in_array(false, $array, true)); 

Natürlich ist dies auch wahr ist, wenn das Array überhaupt keine Elemente enthält, so was Sie wollen ist:

var_dump(!in_array(false, $array, true) && count($array)); 

Edit: es vergessen, das war die Antwort für „Array enthält nur Werte, die nicht genau falsch sind“, nicht „Array enthält mindestens ein Wert, der nicht genau falsch ist“

Actual Lösung:

var_dump(
    0 < count(array_filter($array, function($value) { return $value !== false; })) 
); 

array_filter ein Array mit allen Werten zurückgibt, die !== false sind, wenn es nicht leer ist, Ihre Bedingung wahr ist.

oder vereinfacht, wie in den Kommentaren vorgeschlagen:

var_dump(
    (bool) array_filter($array, function($value) { return $value !== false; }) 
); 

Natürlich kann die Besetzung zu bool auch wenn in einer if-Klausel weggelassen werden.

+0

gute Antwort!;) – hek2mgl

+0

um expliziter zu sein Ich redigierte: "Wie man genau überprüft, ob es mindestens einen NON-false (string, true, int) Wert im Array gibt". Also mit! In_array (false, $ array, true) - das ist unmöglich. – ihtus

+0

das gibt true zurück, wenn alle Werte nicht falsch sind – ihtus

0

Wie streng zu prüfen, ob es mindestens einen nicht-false (string, wahr, int) ist Wert in Array nur oder irgendetwas mit in_array aber nicht foreach?

Dies ist nicht möglich, weil:

  • String: dieser Datentyp einen beliebigen Wert enthalten kann, wie seine nicht boolean (wahr oder falsch) oder NULL.
  • INT: wie string, wie nach unbekannt suchen?
  • Boolean: möglich.
  • NULL: möglich.

Dann können INT und STRING Datentypen nicht nur mit einem abstrakten (int) oder (string) gefunden werden!

EDIT:

function get_type($v) 
{ 
    return(gettype($v)); 
} 

$types = array_map("get_type", $array); 

print_r($types); 

ERGEBNIS:

Array 
(
    [vegs] => string 
    [cheese] => boolean 
    [nuts] => integer 
    [] => NULL 
    [fruits] => string 
) 
+0

Es ist nicht möglich mit 'in_array', richtig. Aber das war nicht die ganze Frage. –

+0

Ich werde so etwas tun! siehe Aktualisierung –