2012-06-22 137 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); 
});