Filter multidimensional arrays

Alexei T picture Alexei T · Mar 13, 2012 · Viewed 18.6k times · Source
Array
(
    [user_mob_1] => Array
        (
            [mob_code] => 06
            [mob] => 069633345
            [type] => 1
            [phone_id] => 0
        )

    [user_mob_2] => Array
        (
            [mob_code] => 07
            [mob] => 07123456
            [type] => 1
            [phone_id] => 
        )

    [user_mob_6] => Array
        (
            [mob_code] => 0
            [mob] => 
            [type] => 1
            [phone_id] => 0
        )

)

The goal is to remove user_mob_* where mob is empty !

The answer is:

foreach($array as $key => $row) {
   if(empty($row['mob'])) unset($array[$key]);
}

Simple, but I'm new in php and first I thinked to use functions like array_filter etc.

All ingenious is simple.

Answer

Jon picture Jon · Mar 13, 2012

Your idea of using a built-in function like array_filter is a very good one; PHP has lots of these that can make your life easier.

Specifically, array_filter accepts a callback that you can use to customize the filtering logic. This would work:

$filtered = array_filter($array, function($el) { return !empty($el['mob']); });

Here the callback is supplied as an anonymous function.