Much like rtrim()
to a string, how do I remove the empty elements of an array only after the last non-empty element towards the end of the array while avoiding a for
or similar loop and possibly using PHP's array functions instead?
I'm actually looking for the fastest/most efficient/elegant way, but if this is not possible without a for
or similar loop or I'm mistaken about "fast/efficient/elegant" especially with PHP's array functions then I'd be more than happy to learn/know what's best. Thanks.
Other assumptions:
For example:
Array
(
[0] => ""
[1] => "text"
[2] => "text"
[3] => ""
[4] => "text"
[5] => ""
[6] => ""
[7] => "text"
[8] => ""
[9] => ""
)
would end up being:
Array
(
[0] => ""
[1] => "text"
[2] => "text"
[3] => ""
[4] => "text"
[5] => ""
[6] => ""
[7] => "text"
)
and
Array
(
[0] => "text"
[1] => "text"
[2] => "text"
[3] => "text"
[4] => "text"
[5] => "text"
[6] => "text"
[7] => ""
[8] => ""
[9] => ""
)
would end up being:
Array
(
[0] => "text"
[1] => "text"
[2] => "text"
[3] => "text"
[4] => "text"
[5] => "text"
[6] => "text"
)
It's like you wrote it in your question: As long as the last value is an empty string, remove it from the array:
while ("" === end($array))
{
array_pop($array);
}
Edit: I have no clue how serious this is, however for the fun, I've come up with this which does not uses any loop in user-code, however, loops are involved for sure inside PHP C functions. Probably this can make a difference, no idea, to enjoy responsively:
$array = array_slice($array, 0, key(array_reverse(array_diff($array, array("")), 1))+1);
How it works:
array("")
. Keys will be preserved (that's the important part, the keys in your array are 0-n).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
)
Use trim()
or rtrim()
as you need it:
explode( '·', trim( implode( '·', $test ), '·') );
It changes …
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
)
Once you rebuild your array, use array_values
to rebuild the indexes.
array_walk_recursive('unset_any_null_values_function', $array);
print_r(array_values($array));