我有一个由以下元素组成的数组
[null, null, 1, 4, 6, null, null, null, null]如何仅从数组中移除右侧的空,使其成为
[null, null, 1, 4, 6]我尝试过array_filter,但是它删除了所有虚假的值
$arr = array_filter([null, null, 1, 4, 6, null, null, null, null]);结果是
$arr = [1, 4, 6]发布于 2019-12-12 11:04:09
您可以使用该array_filter结果本身。您得到了所有不是NULL的值。因此,从该数组中获取last key,这是array_slice函数的结束限制。
<?php
$arr = [null, null, 1, 4, 6, null, null, null, null,null];
$filtered_arr = array_filter($arr);
end($filtered_arr);
$limit = key($filtered_arr) + 1;
$arr = array_slice($arr,0,$limit);
print_r($arr);更新:
如果输入数组包含0,上述答案可能导致不正确的结果。为了纠正同样的情况,我们只能从数组中筛选出空值。
<?php
$arr = [null, null, 1, 4, 6, null, 0, null, null,null];
$filtered_arr = array_filter($arr,function($value){
return !is_null($value);
});
end($filtered_arr);
$limit = key($filtered_arr) + 1;
$arr = array_slice($arr,0,$limit);
print_r($arr);发布于 2019-12-12 11:03:29
您可以尝试下面的代码
$notNull = true;
$item = [null, null, 1, 4, 6, null, null, null, null];
$output = array();
for($i=count($item)-1;$i>=0;$i--){
if( is_null( $item[$i]) && $notNull ){
continue;
}
else{
$notNull = false;
$output[] = $item[$i];
}
}
$output = array_reverse($output);发布于 2019-12-12 10:53:47
您可以使用array_pop()删除结束项,直到遇到非空值(或空数组),然后将最后一个项推回到.
$array = [null, null, 1, 4, 6, null, null, null, null];
while( count($array) > 0 && ($end = array_pop($array)) === null );
array_push($array, $end);
print_r($array);这给了..。
Array
(
[0] =>
[1] =>
[2] => 1
[3] => 4
[4] => 6
)https://stackoverflow.com/questions/59302847
复制相似问题