我得到了以下数组,我要实现的目标是删除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循环取消设置该范围,但这似乎并不有效解决我。所以我的问题是还有其他更有效的方法来实现这一目标吗?谢谢。
答案 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