2012-06-22 288 views
10

第一個非空值,如果我有一個數組:得到陣列PHP

Array 
(
    [0] => 
    [1] => a 
    [2] => b 
    [3] => c 
) 

我想從陣列得到的第一個非空值,在這種情況下,「A」。我怎麼能做到這一點很好,很容易?

+0

的漂亮和容易的,我指的是短期的做法。 –

回答

32

不知道關於好和容易。但短短的方法可能是:

$first = current(array_filter($sparse_array)); 

array_filter將提取您的「truthy」的價值觀,因此跳過空,假的條目。而current只是給你第一個剩餘的條目。

+2

不幸的是,「truthy」也會過濾出空字符串,布爾錯誤和數字零...否則最好的解決方案,如果OP想要邏輯 –

+1

甚至可以添加自定義回調'array_filter()'只顯式過濾'null'值。另外,'current()'期望它的參數通過引用傳遞,所以目前這會發出「嚴格標準」的通知/警告。 – nickb

+0

作爲對真實性的各種解釋的替代方案,可以應用決策函數:'...(array_filter($ arr,「strlen」))' – mario

2

好了,你可以試試這個:

foreach($array as $x) { 
    if($x) break; 
} 
if($x) { 
    // $x is the first non-null value 
} 
else { 
    // There were no non-null values 
} 
3
function getFirstNotNull($array) { 
    foreach($array as $val) { 
     if(!is_null($val) || !$val) return $val; 
    } 
} 
+0

在第二行中,它是'$ array'而不是'$ arrea'。 –

4
function get_first_not_null($array){ 
    foreach($array as $v){ 
    if($v !== null){ 
     return $v; 
    } 
    } 
    return null; 
} 
3
$res = null; 
foreach ($arr as $v) { 
    if ($v !== null) { 
     $res = $v; 
     break; 
    } 
} 
+0

更多的代碼,馬里奧的解決方案,但它無疑運行得更快 - 它也會捕獲非空「假」值。 – Blazemonger

1

我會用array_reduce

$firstNonNull = array_reduce($array, function($v, $w) { 
    return $v ? $v : (isset($w) ? $w : FALSE); 
});