Вопрос по php, arrays – получить первое ненулевое значение из массива php

13

Если у меня есть массив:

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

И я хочу получить первое ненулевое значение из массива, в данном случае & quot; a & quot ;. Как я могу сделать это красиво и легко?

под легким и понятным я подразумевал короткий подход. Drew Bartlett

Ваш Ответ

6   ответов
5
function get_first_not_null($array){
  foreach($array as $v){
    if($v !== null){
        return $v;
    }
  }
  return null;
}
Поскольку ОП попросил «красиво и легко» Решение, простой цикл for более уместен, чем что-то с обратными вызовами.
3
function getFirstNotNull($array) {
    foreach($array as $val) {
         if(!is_null($val) || !$val) return $val;
    }
}
Во второй строке это должно быть$array не$arrea.
35

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

кудаarray_filter будет извлекать вас & quot;truthy& Quot; значения, таким образом пропуская пустые и ложные записи. В то время какcurrent просто дает вам первую из этих оставшихся записей.

К сожалению, "правда" также отфильтровывает пустые строки, логические ложные и числовые нули ... в противном случае лучшее решение, если ОП хочет такую логику
Я вижу вашу кодировкуstyle не сильно изменился ...: P
Ммм, так0 не будет возвращен, если присутствует?
В качестве альтернативы для различных интерпретаций правдивости может быть использована решающая функция:...(array_filter($arr, "strlen"))
Можно даже добавить пользовательский обратный вызовarray_filter() только явно фильтроватьnull ценности. Также просто записка,current() ожидает, что его параметр будет передан по ссылке, поэтому в настоящее время это приведет к появлению «строгих стандартов» извещение / предупреждение.
1

array_reduce

$firstNonNull = array_reduce($array, function($v, $w) {
  return $v ? $v : (isset($w) ? $w : FALSE);
});
3
$res = null;
foreach ($arr as $v) {
    if ($v !== null) {
        $res = $v;
        break;
    }
}
Еще один код, который решает Марио, но, несомненно, работает быстрее - и он поймает ненулевое «Falsey». ценности также.
2

foreach($array as $x) {
    if( $x) break;
}
if( $x) {
    // $x is the first non-null value
}
else {
    // There were no non-null values
}

Похожие вопросы