【问题标题】:get first non-null value from array php从数组php中获取第一个非空值
【发布时间】:2012-06-24 22:07:04
【问题描述】:

如果我有一个数组:

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

我想从数组中获取第一个非空值,在本例中为“a”。我怎么能做得这么好又轻松?

【问题讨论】:

  • 我的意思是简单易行。

标签: php arrays


【解决方案1】:

不确定好不好。但一个简短的方法可能是:

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

array_filter 将在哪里提取“truthy”值,从而跳过空的和错误的条目。而current 只是为您提供了剩余条目中的第一个。

【讨论】:

  • 不幸的是,“truthy”还会过滤掉空字符串、布尔假值和数字零……否则,如果 OP 想要这种逻辑,这是最好的解决方案
  • 甚至可以向array_filter() 添加自定义回调,以仅显式过滤null 值。还请注意,current() 期望其参数通过引用传递,因此目前这将发出“严格标准”通知/警告。
  • 作为对真实性的各种解释的替代方案,可以应用决策函数:...(array_filter($arr, "strlen"))
  • 嗯,所以0 不会被返回,如果存在的话?
  • 我看到您的编码style 没有太大变化...:P
【解决方案2】:
function get_first_not_null($array){
  foreach($array as $v){
    if($v !== null){
        return $v;
    }
  }
  return null;
}

【讨论】:

  • 由于 OP 要求提供“简单易用”的解决方案,因此简单的 for 循环比涉及回调的方法更合适。
【解决方案3】:
function getFirstNotNull($array) {
    foreach($array as $val) {
         if(!is_null($val) || !$val) return $val;
    }
}

【讨论】:

  • 第二行应该是$array 而不是$arrea
【解决方案4】:
$res = null;
foreach ($arr as $v) {
    if ($v !== null) {
        $res = $v;
        break;
    }
}

【讨论】:

  • mario 解决方案的更多代码,但毫无疑问它运行得更快——它也会捕获非空的“假”值。
【解决方案5】:

嗯,你可以试试这个:

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

【讨论】:

    【解决方案6】:

    我会使用array_reduce

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

    【讨论】:

      猜你喜欢
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      相关资源
      最近更新 更多