2013-05-09 24 views
18

W poniższej tablicy asocjacyjnejJak sprawdzić, czy tablica asocjacyjna ma pusty lub wartość null

$array = array(
    [0] => 0 
    [1] => 1 
    [2] => 
    [3] => 2 
    [4] => 
) 

jaki sposób można ustalić, czy dany klucz jest pusty (lub null) wartość? Kiedyś

if(empty($array[$value])) 

i

if(isset($array[$value])) && $array[$value] !=='') 

Podczas korzystania empty ja również uzyskać false dla pierwszej wartości tablicy, która jest zerowa i isset wydaje się nie załatwi.

+1

użyć 'is_null()'? – Populus

+0

Robię: 'foreach ($ array jako $ key => $ value) {if (is_null ($ array [$ value])) {echo 'NULL'; }} 'ale to nie działa. Co ja robię źle? – bikey77

+0

$ tablica [/ * klucz musi być tutaj * /]; –

Odpowiedz

21

użyć array_key_exists() i is_null() do tego. powróci TRUE jeśli klucz istnieje i ma wartość daleko od NULL

Różnica:

$arr = array('a' => NULL); 

var_dump(array_key_exists('a', $arr)); // --> TRUE 
var_dump(isset($arr['a'])); // --> FALSE 

Więc należy sprawdzić:

if(array_key_exists($key, $array) && is_null($array[$key])) { 
    echo "key exists with a value of NULL"; 
} 
+2

'array_key_exists' zwróci wartość true dla pustych wartości, ponieważ klucz istnieje. – Paulpro

+1

@Paulpro I to jest dokładnie pytanie – hek2mgl

+1

Och, widzę. Myślałem, że masz na myśli, że element array_key_exists zwróci wartość false dla pustej wartości. Teraz, gdy wyjaśniłeś to bardziej szczegółowo, +1 – Paulpro

1
foreach($array as $i => $v) { 
    if(null === $v) { 
     // this item ($array[$i]) is null 
    } 
} 

... albo, dla dany klucz:

if(null === $array[2]) { 
    // this item ($array[2]) is null 
} 
4

PHP wartości empty powrotne stwierdza:

Zwraca FALSE jeśli zmienna istnieje i ma niepusty, niezerową wartość. W przeciwnym razie zwraca TRUE.

następujących czynności uważane są za puste:

"" (pusty łańcuch)

0 (0 a jest liczbą całkowitą)

0.0 (0 jako pływak)

"0" (0 jako ciąg)

NULL

FAŁSZ

array() (pusta tablica)

$ var; (Zmienna zadeklarowana, ale bez wartości)

ze swojego przykład tablicy biorę go jak chcesz wykluczyć 0 jako liczbę całkowitą. Jeśli tak jest w przypadku byłoby to rade:

<?php 
    $array = array(0, 1, '', 2, ''); 

    foreach ($array as $value) { 
     echo (empty($value) && 0 !== $value) ? "true\n" : "false\n"; 
    } 

Jeśli chcesz wykluczyć inne warunki, które empty uważa prostu negują je w takim stanie. Weź pod uwagę, że nie jest to optymalne rozwiązanie, jeśli chcesz sprawdzić inne wartości.

+1

(puste (wartość $) i & lt; 0 '! == $ wartość) dodawanie cytatu/podwójnego cudzysłowu na zero działa dla mnie. –

+0

@IvorySantos, ''0'' i' "0" 'są reprezentacjami ciągów zero, a nie liczbą całkowitą, to naprawdę zależy od tego, co próbujesz osiągnąć. –

2
if (!isset($array[$key]) || $array[$key] == "" || is_null($array[$key])) 
{ 
    //given key does not exist or it has "" or NULL value 
} 
1

Potencjalnie może to być czystsze, gdybym wiedział, jak tablica została skonstruowana, ale, o założenie, że można mieć zarówno pustych ciągów lub wartości null w tablicy, a chcesz, aby uwzględnić wartości 0 - -> oto co zrobię:

if (is_null($array[$key]) || (string)$array[$key] == '') 

Oto trochę kodu testu pokazano go w akcji z tablicą, która ma zarówno 0, null, pusty ciąg i niezerowych liczb ...

$array = array(0,1,null,2,''); 
print_r($array); 

foreach ($array as $key => $val) { 
     if (is_null($array[$key]) || (string)$array[$key] == '') { 
      echo $key.", true\n"; 
     } 
} 

Jeśli chodzi o usi ng isset() - należy ustawić pusty ciąg znaków. Które mogą być co używasz do (oprócz 0 rozważane pusty) Porównaj z tej rejestracji:

$foo = array(0,1,null,2,''); 

print_r($foo); 
foreach ($foo as $key => $val) { 
     if (isset($foo[$key])) { 
       echo $key.", true\n"; 
     } 
} 
12

spojrzał na wszystkich odpowiedzi, a ja ich nie lubię. Czy nie jest to o wiele prostsze i lepsze? To, czego używam:

if (in_array(null, $array)) { 
    // There are null values. 
    } 
+2

'if (in_array ('', $ _POST)) {// Zawiera puste wartości. } ' –

+0

W PHP 7.0.1 (wersja dla Windows) jest to nieprawidłowo działające – HellBaby

Powiązane problemy