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

我有以下元素的数组

[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]


手掌心
浏览 103回答 3
3回答

墨色风雨

您可以利用该array_filter结果本身。你得到所有不是的值NULL。所以从那个数组中获取,这就是你对函数的最终限制。last keyarray_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);演示: https ://3v4l.org/RVcjt更新:如果输入数组包含 a 0,则上述答案可能会导致不正确的结果。为了解决这个问题,我们可以只从数组中过滤掉 NULL 值。<?php$arr = [null, null, 1, 4, 6, null, 0, null, null,null];$filtered_arr = array_filter($arr,function($value){&nbsp; &nbsp; 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

白板的微信

你可以试试下面的代码$notNull = true;$item = [null, null, 1, 4, 6, null, null, null, null];$output = array();for($i=count($item)-1;$i>=0;$i--){&nbsp; &nbsp; if( is_null( $item[$i]) &&&nbsp; $notNull ){&nbsp; &nbsp; &nbsp; &nbsp; continue;&nbsp; &nbsp; }&nbsp; &nbsp; else{&nbsp; &nbsp; &nbsp; &nbsp; $notNull = false;&nbsp; &nbsp; &nbsp; &nbsp; $output[] = $item[$i];&nbsp;&nbsp;&nbsp; &nbsp; }}$output = array_reverse($output);

慕盖茨4494581

您可以使用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(&nbsp; &nbsp; [0] =>&nbsp;&nbsp; &nbsp; [1] =>&nbsp;&nbsp; &nbsp; [2] => 1&nbsp; &nbsp; [3] => 4&nbsp; &nbsp; [4] => 6)
打开App,查看更多内容
随时随地看视频慕课网APP