首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php中从数组的右侧删除空?

如何在php中从数组的右侧删除空?
EN

Stack Overflow用户
提问于 2019-12-12 10:47:01
回答 5查看 135关注 0票数 0

我有一个由以下元素组成的数组

代码语言:javascript
复制
[null, null, 1, 4, 6, null, null, null, null]

如何仅从数组中移除右侧的空,使其成为

代码语言:javascript
复制
[null, null, 1, 4, 6]

我尝试过array_filter,但是它删除了所有虚假的值

代码语言:javascript
复制
$arr = array_filter([null, null, 1, 4, 6, null, null, null, null]);

结果是

代码语言:javascript
复制
$arr = [1, 4, 6]
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-12-12 11:04:09

您可以使用该array_filter结果本身。您得到了所有不是NULL的值。因此,从该数组中获取last key,这是array_slice函数的结束限制。

代码语言:javascript
复制
<?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);

演示: https://3v4l.org/RVcjt

更新:

如果输入数组包含0,上述答案可能导致不正确的结果。为了纠正同样的情况,我们只能从数组中筛选出空值。

代码语言:javascript
复制
<?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);

演示: https://3v4l.org/S5a96

票数 2
EN

Stack Overflow用户

发布于 2019-12-12 11:03:29

您可以尝试下面的代码

代码语言:javascript
复制
$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);

演示链接

票数 1
EN

Stack Overflow用户

发布于 2019-12-12 10:53:47

您可以使用array_pop()删除结束项,直到遇到非空值(或空数组),然后将最后一个项推回到.

代码语言:javascript
复制
$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);

这给了..。

代码语言:javascript
复制
Array
(
    [0] => 
    [1] => 
    [2] => 1
    [3] => 4
    [4] => 6
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59302847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档