2012-06-22 2 views
10

Если у меня есть массив:получить первое ненулевое значение из массива PHP

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

И я хочу, чтобы получить первое ненулевое значение из массива, в данном случае «а». Как я мог делать это хорошо и легко?

+0

по красивым и легким, я имел в виду короткий подход. –

ответ

32

Не уверен, что приятно и легко. Но короткий подход может быть:

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

Где array_filter извлечет вам «truthy» значения, таким образом, пропуская пустые и ложные записи. Пока current просто дает вам первую из оставшихся записей.

+2

К сожалению, «правша» также отфильтровывает пустые строки, логические фальши и числовые нули ... в противном случае лучшее решение, если 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

Больше кода, что решение mario, но он, несомненно, работает быстрее - и он будет ловить непустые «ложные» значения. – Blazemonger

1

Я хотел бы использовать array_reduce

$firstNonNull = array_reduce($array, function($v, $w) { 
    return $v ? $v : (isset($w) ? $w : FALSE); 
}); 
Смежные вопросы