如何清除数组中最后一个值之后的空值



我有以下数组,我试图实现的是删除i值之后的所有null值。

原始阵列:

$a = ["a", "b", null, null, null, null, "i", null, null, null, null];

期望的结果:

$a = ["a", "b", null, null, null, null, "i"];

我尝试过的事情:所以我有一个想法,使用 array_filter 从空值中过滤数组,获取最后一个值的索引,然后获取原始数组中最后一项的索引,并使用 for loop 取消设置该范围,但这对我来说似乎不是一个有效的解决方案。所以我的问题是,还有其他更有效的方法来实现这一点吗?谢谢。

仅当所有非 null 值都是唯一的时,array_filter() 方法才有效。如果有重复项,array_search()会找到其中的第一个,而不是最后一个。

您可以使用从末尾到找到非 null 条目的 for 循环:

for ($i = count($a)-1; $i >= 0 && $a[$i] === null; $i--) {
    unset($a[$i]);
}

array_pop()允许您从数组末尾抓取元素;您可以继续这样做,直到找到非null元素或数组为空。

// This version modifies the array in-place
function remove_trailing_nulls(&$arr) {
  while($arr) {
    $last = array_pop($arr);
    if($last !== null) {
      // Re-add the non-null element that was removed, and we're done
      $arr[] = $last;
      return;
    }
  }
}
// This version returns a new copy of the array
function without_trailing_nulls($arr) {
  while($arr) {
    $last = array_pop($arr);
    if($last !== null) {
      // Re-add the non-null element that was removed, and we're done
      $arr[] = $last;
      break;
    }
  }
  return $arr;
}
$found = false;
$item = "i";
$a = ["a", "b", null, null, null, null, "i", null, null, null, null];
print_r(array_filter($a, function($value) { 
  if($value == $item) {
    $found = true;
  }
  return !$found || !is_null($value) 
}));

这个想法基本上是我们在找到我们的项目后开始检查空值。

只需使用array_filter函数:

$result = array_filter($arr, function($v, $k) use($arr) {
    $iKey = array_search('i', $arr);
    if(($iKey >= $k) || ($iKey < $k && !$v))
        return $v;
}, ARRAY_FILTER_USE_BOTH)

如评论中所述,如果i可以是任何东西,您可以简单地执行以下单行;):

var_dump(array_slice($arr, 0, array_search(end(array_filter($arr)),$arr)+1));
print_r(array_filter($linksArray, function($value) { return $value !== ''; }));

使用 array_filter() 查看更多

最新更新