Как "rtrim" массив PHP (удалять пустые элементы ТОЛЬКО в сторону END массива) и избегать использования для или аналогичного цикла, если возможно
Как строка 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"
[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);
Как это работает:
- Получить массив со всеми значениями, которые не находятся в
array("")
. Ключи будут сохранены (что важная часть, ключи в вашем массиве - 0-n).
- Получить ключ последнего элемента.
- Нарисуйте массив от начала до этой позиции.
Ответ 2
Используйте trim()
или rtrim()
по мере необходимости:
explode( '·', trim( implode( '·', $test ), '·') );
Изменяется...
Array
(
[0] =>
[1] => text
[2] => text
[3] =>
[4] => text
[5] =>
[6] =>
[7] => text
[8] =>
)
... to...
Array
(
[0] => text
[1] => text
[2] =>
[3] => text
[4] =>
[5] =>
[6] => text
)
Ответ 3
function array_rtrim($array)
{
$array = array_reverse($array);
foreach ($array as $key => $value)
if ((string) $value === '') unset($array[$key]); else break 1;
return array_reverse($array);
}
...
$array = array('', 1, 2, 3, '', 0, '', '');
print_r(array_rtrim($array));
...
Array
(
[0] =>
[1] => 1
[2] => 2
[3] => 3
[4] =>
[5] => 0
)
Ответ 4
Как только вы восстановите свой массив, используйте array_values
для восстановления индексов.
array_walk_recursive('unset_any_null_values_function', $array);
print_r(array_values($array));