2012-06-22 23 views
10

ilk boş olmayan bir değer olsun. Bunu nasıl güzel ve kolay bir şekilde yapmaya devam edebilirim?dizi php

+0

kullanmak. –

cevap

32

emin değilim. Ancak kısa bir yaklaşım olabilir:

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

array_filter dolayısıyla boş ve yanlış girdileri atlama, size "truthy" değerlerini çıkarmak yerde. current sadece kalan girişlerin ilkini size verirken.

+2

Ne yazık ki, "doğruluk" da boş dizeleri, boolean falsları ve sayısal sıfırları filtreler ... aksi takdirde OP mantıksal –

+1

istiyorsa en iyi çözüm bile 'null' kelimesini sadece açıkça filtrelemek için 'array_filter()' özel bir geri arama bile ekleyebilirsiniz değerler. Ayrıca sadece bir not, 'current()' parametresinin referans olarak geçirilmesini bekler, bu nedenle şu anda bu bir "katı standartlar" uyarısı/uyarısı verecektir. – nickb

+0

Hakikatin çeşitli yorumları için alternatif olarak, bir karar fonksiyonu uygulanabilir: '... (array_filter ($ arr," strlen ")) – mario

2

Eh, bu deneyebilirsiniz: güzel ve kolay yaklaşık

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

İkinci satırda '$ dizi' $ arrea 'değil. –

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

Daha fazla kod, mario'nun çözümü, ancak şüphesiz daha hızlı çalışır - ve null olmayan "falsey" değerlerini de yakalar. – Blazemonger

1

Ben kısa bir yaklaşım anlamına geliyordu, yavaşça tarafından array_reduce

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