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

时间:2019-01-21 22:51:18

标签: php arrays filter

我得到了以下数组,我要实现的目标是删除null值之后的所有i值。

原始数组:

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

所需结果:

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

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

5 个答案:

答案 0 :(得分:1)

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;
}

答案 1 :(得分:1)

只有所有非空值都是唯一的,array_filter()方法才有效。如果有重复项,array_search()将找到第一个,而不是最后一个。

您可以使用for循环,该循环从头开始直到找到非空条目:

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

答案 2 :(得分:0)

只需使用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));

答案 3 :(得分:0)

$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) 
}));

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

答案 4 :(得分:-3)

print_r(array_filter($linksArray, function($value) { return $value !== ''; }));

使用array_filter()See more