如何";rtrim“;PHP数组(仅在数组末尾删除空元素),并尽可能避免for或类似循环
与字符串的如何";rtrim“;PHP数组(仅在数组末尾删除空元素),并尽可能避免for或类似循环,php,arrays,Php,Arrays,与字符串的rtrim()非常相似,如何仅在数组末尾的最后一个非空元素之后删除数组的空元素,同时避免for或类似循环,并可能使用PHP的数组函数 实际上,我正在寻找最快/最高效/优雅的方法,但是如果没有for或类似的循环,或者我对“快速/高效/优雅”的理解有误,特别是对于PHP的数组函数,那么我将非常乐意学习/知道什么是最好的。谢谢 其他假设: 在数组中最后一个非空元素之前,可以有一系列单个或连续的空元素 无需担心空数组,但如果涵盖了此情况,则完全可以 例如: Array ( [0] =&
rtrim()
非常相似,如何仅在数组末尾的最后一个非空元素之后删除数组的空元素,同时避免for
或类似循环,并可能使用PHP的数组函数
实际上,我正在寻找最快/最高效/优雅的方法,但是如果没有for
或类似的循环,或者我对“快速/高效/优雅”的理解有误,特别是对于PHP的数组函数,那么我将非常乐意学习/知道什么是最好的。谢谢
其他假设:
Array
(
[0] => ""
[1] => "text"
[2] => "text"
[3] => ""
[4] => "text"
[5] => ""
[6] => ""
[7] => "text"
[8] => ""
[9] => ""
)
最终将是:
Array
(
[0] => ""
[1] => "text"
[2] => "text"
[3] => ""
[4] => "text"
[5] => ""
[6] => ""
[7] => "text"
)
Array
(
[0] => "text"
[1] => "text"
[2] => "text"
[3] => "text"
[4] => "text"
[5] => "text"
[6] => "text"
)
及
最终将是:
Array
(
[0] => ""
[1] => "text"
[2] => "text"
[3] => ""
[4] => "text"
[5] => ""
[6] => ""
[7] => "text"
)
Array
(
[0] => "text"
[1] => "text"
[2] => "text"
[3] => "text"
[4] => "text"
[5] => "text"
[6] => "text"
)
就像你在问题中写的:只要最后一个值是空字符串,就从数组中删除它:
while ("" === end($array))
{
array_pop($array);
}
编辑:我不知道这有多严重,不过为了好玩,我想出了一个在用户代码中不使用任何循环的方法,但是,循环确实涉及到PHP C函数中。也许这会带来不同,不知道,负责任地享受:
$array = array_slice($array, 0, key(array_reverse(array_diff($array, array("")), 1))+1);
工作原理:
- 获取一个包含所有不在
数组(“”)中的值的数组。密钥将被保留(这是重要的部分,数组中的密钥为0-n)
- 获取最后一个元素的键
- 从开始到该位置切片阵列
trim()
或rtrim()
:
explode( '·', trim( implode( '·', $test ), '·') );
它改变了
Array
(
[0] =>
[1] => text
[2] => text
[3] =>
[4] => text
[5] =>
[6] =>
[7] => text
[8] =>
)
…到
Array
(
[0] => text
[1] => text
[2] =>
[3] => text
[4] =>
[5] =>
[6] => text
)
重建数组后,使用
array\u值
重建索引
array_walk_recursive('unset_any_null_values_function', $array);
print_r(array_values($array));
除了为执行
,我尝试了array_filter(),但我意识到这也会在数组结束之前删除其他空元素。哦,对不起@webarto,无论如何谢谢。只要成员不是'0'
如果(!empty($value))中断;未设置($array[$key])代码>为mesweet果冻豆工作是的!我怎么会错过呢?哈克雷·耶拉传说。谢谢(很抱歉,需要再等4分钟才能接受答案。)和@webarto,至少它不必在整个数组中循环。@AnaBan,在任何情况下它都不会:)+1@webarto我懂了。。如果整个数组都被空值填充了呢?其计数仍将大于0。。陛下还是我又错了?谢谢,我学到了很多。@AnaBan:“只有”三个内置数组函数,我就能做到。请参阅更新后的答案。@mplungjan:您很可能是指而(!end($array))
但是,如果您想更详细地了解该错误,请参阅;如果您想了解为什么使用empty
错误,请查看在“内爆”中设置的分隔符会发生什么情况在原始数组中的一个值内使用?则它将中断。如果你不能控制内容,你需要@hakre的解决方案。对-我刚刚指出,当你需要像这样从数组来回移动时,你真的不能使用数组到字符串的操作。
Array
(
[0] => text
[1] => text
[2] =>
[3] => text
[4] =>
[5] =>
[6] => text
)
array_walk_recursive('unset_any_null_values_function', $array);
print_r(array_values($array));