Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to "rtrim" a PHP array (remove empty elements ONLY towards the END of the array) and avoid a for or similar loop if possible

Tags:

arrays

php

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:

  1. There can be a series of single or consecutive empty elements before the last non-empty element in the array.
  2. No need to worry about an empty array, but if this case is covered it's totally fine.

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"
)
like image 690
Ana Ban Avatar asked Dec 29 '11 02:12

Ana Ban


People also ask

How do you remove empty elements from an array?

In order to remove empty elements from an array, filter() method is used. This method will return a new array with the elements that pass the condition of the callback function.

How do you delete the last element of an array in PHP?

The array_pop() function deletes the last element of an array.

How do you trim a space in an array in PHP?

function trimArray(&$value) { $value = trim($value); } $pmcArray = array('php ','mysql ', ' code '); array_walk($pmcArray, 'trimArray'); by using array_walk function, we can remove space from array elements and elements return the result in same array.


1 Answers

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:

  • Get an array with all values that are not in array(""). Keys will be preserved (that's the important part, the keys in your array are 0-n).
  • Get the key of the last element.
  • Slice the array from start to that position.
like image 158
hakre Avatar answered Sep 21 '22 10:09

hakre