如何"rtrim"PHP数组(仅向数组的END移除空元素)并尽可能避免使用for或类似的循环

Ana*_*Ban 15 php arrays

非常喜欢rtrim()字符串,如何在数组末尾的最后一个非空元素之后删除数组的空元素,同时避免使用for类似的循环并可能使用PHP的数组函数?

我实际上正在寻找最快/最有效/优雅的方式,但如果没有for或类似的循环这是不可能的,或者我错误的"快速/高效/优雅"特别是PHP的数组函数,那么我会更多比开心学习/知道什么是最好的.谢谢.

其他假设:

  1. 在数组中的最后一个非空元素之前可以有一系列单个或连续的空元素.
  2. 无需担心空数组,但如果涵盖这种情况则完全没问题.

例如:

Array
(
    [0] => ""
    [1] => "text"
    [2] => "text"
    [3] => ""
    [4] => "text"
    [5] => ""
    [6] => ""
    [7] => "text"
    [8] => ""
    [9] => ""
)
Run Code Online (Sandbox Code Playgroud)

最终会成为:

Array
(
    [0] => ""
    [1] => "text"
    [2] => "text"
    [3] => ""
    [4] => "text"
    [5] => ""
    [6] => ""
    [7] => "text"
)
Run Code Online (Sandbox Code Playgroud)

Array
(
    [0] => "text"
    [1] => "text"
    [2] => "text"
    [3] => "text"
    [4] => "text"
    [5] => "text"
    [6] => "text"
    [7] => ""
    [8] => ""
    [9] => ""
)
Run Code Online (Sandbox Code Playgroud)

最终会成为:

Array
(
    [0] => "text"
    [1] => "text"
    [2] => "text"
    [3] => "text"
    [4] => "text"
    [5] => "text"
    [6] => "text"
)
Run Code Online (Sandbox Code Playgroud)

hak*_*kre 15

就像你在你的问题中写的那样:只要最后一个值是一个空字符串,就把它从数组中删除:

while ("" === end($array))
{
    array_pop($array);
}
Run Code Online (Sandbox Code Playgroud)

编辑:我不知道这有多严重,但是为了好玩,我想出了这个没有在用户代码中使用任何循环的东西,但是,在PHP C函数中肯定涉及循环.也许这可以有所作为,不知道,以响应方式享受:

$array = array_slice($array, 0, key(array_reverse(array_diff($array, array("")), 1))+1);
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  • 获取包含所有不在的值的数组array("").键将被保留(这是重要的部分,数组中的键是0-n).
  • 获取最后一个元素的关键字.
  • 从开始到该位置切割数组.