2012-06-22 1 views
10

から最初の非null値を取得します。どのように私はそれをすごく簡単にやって行くことができますか?配列PHP

+0

を使用することになり、私は短いアプローチを意味しました。 –

答えて

32

はわかりません。しかし、短期的なアプローチは次のようになります。array_filterは、このように空と偽のエントリをスキップし、あなたに「truthy」値を抽出します

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

currentは、それらの残りのエントリの最初のものです。

+2

残念ながら、 "truthy"は空文字列、ブール値の偽数、数値ゼロをフィルタリングします。そうでなければOPがその論理を望むならば最高の解決策 –

+1

'null 'を明示的にフィルタリングするだけでカスタムコールバックを' array_filter値。またメモだけで、 '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

2行目で '$ arrea'ではなく' $ array'となります。 –

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

より多くのコードがmarioの解決策ですが、疑いもなく速く実行され、非ヌルの「偽の」値も捕捉されます。 – Blazemonger

1

私はいいと簡単でarray_reduce

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