2017-06-16 57 views
0

我不明白爲什麼這會爲我返回一個空數組。與array_filter混淆,即使明確檢查也忽略0值

$fruits = [ 
    'apple' => 3, 
    'pear' => 5, 
    'orange' => 0 
]; 

$filtered = array_filter($fruits, function($fruit) { 
    if ($fruit == 0) { 
     return $fruit; 
    } 
}); 

var_dump($filtered); //array (size=0) 

對於'orange',回調函數的計算結果爲true,但數組仍爲空。如果我專門爲其他任何人做,那麼它會正確返回。

$fruits = [ 
    'apple' => 3, 
    'pear' => 5, 
    'orange' => 0 
]; 

$filtered = array_filter($fruits, function($fruit) { 
    if ($fruit == 5) { 
     return $fruit; 
    } 
}); 

var_dump($filtered); 
// array (size=1) 
// 'pear' => int 5 
+1

array_filter的回調函數必須返回'true',而不是'$ fruit' – WheatBeak

回答

1

array_filter()預計true到包括元素和false排除它。你說如果$fruit == 0然後返回0,如果沒有,那麼不要返回任何東西。不返回任何函數的結果是null兩者0null鬆散評估爲false,所以它總是false

if ($fruit == 0) { 
    return $fruit; 
} 

至少,你要檢查不0和返回true :

if ($fruit !== 0) { 
    return true; 
} 

或將要詳細:

if ($fruit === 0) { 
    return false; 
} else { 
    return true; 
} 

如果你有過濾掉0falsenull和一個空字符串"" OK,然後你可以使用:

$filtered = array_filter($fruits); 
0

您可以嘗試返回$水果=== 0,而不是返回$水果。如下:

$filtered = array_filter($fruits, function($fruit) { 
    return $fruit === 0; 
});