如何“rtrim”PHP数组(仅在数组的末尾删除空元素),并尽可能避免for或类似的循环

2022-08-30 23:29:39

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

我实际上正在寻找最快/最有效/优雅的方式,但是如果没有或类似的循环,这是不可能的,或者我误解了“快速/高效/优雅”,特别是对于PHP的数组函数,那么我将非常乐意学习/知道什么是最好的。谢谢。for

其他假设:

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

例如:

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"
    [7] => ""
    [8] => ""
    [9] => ""
)

最终会是:

Array
(
    [0] => "text"
    [1] => "text"
    [2] => "text"
    [3] => "text"
    [4] => "text"
    [5] => "text"
    [6] => "text"
)

答案 1

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

while ("" === end($array))
{
    array_pop($array);
}

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

$array = array_slice($array, 0, key(array_reverse(array_diff($array, array("")), 1))+1);

它是如何工作的:

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

答案 2

根据需要使用或: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
)