Search code examples
phparraysarray-filter

Filter multidimension array with conditional logic


I have below array,

Array ( [0] => Array ( [location] => X33 [usernumber] => 1 [order] => XX [part_number] => Hi ) [1] => Array ( [location] => X33 [usernumber] => 1 [order] => XX [part_number] => 68730 ) [2] => Array ( [location] => W33 [usernumber] => 2 [order] => YY [part_number] => 68741) [3] => Array ( [location] => W33 [usernumber] => 2 [order] => YY [part_number] => Hello )

I want to filter this array with usernumber = 1, by this it will create 1 array with arrays which have usernumber = 1, similarly it will create for usernumber=2

I had users in DB and will search user in this array,

I tried below code,

$users = $this->admin_model->get_usersforshipment();
foreach ($users as $user) {

  $filtered = array_filter($csv_array, function($user)

   { //Below is retrurning as orignal $csv_array, not filtered,
    return !empty($user['usernumber']); 

  });

}

Desired output, when $users['usernumber] == 1

Array ( [0] => Array ( [location] => X33 [usernumber] => 1 [order] => XX [part_number] => Hi ) [1] => Array ( [location] => X33 [usernumber] => 1 [order] => XX [part_number] => 68730 ) )

Desired output, when $users['usernumber] == 2

Array ( [0] => Array ( [location] => W33 [usernumber] => 2 [order] => YY [part_number] => 68741) [1] => Array ( [location] => W33 [usernumber] => 2 [order] => YY [part_number] => Hello ) 

How can i filter only 2 arrays from Multi Dimension array?


Solution

  • Online Example, Description added after your feedback.

    $arr = array(
            array ('location' => 'X33',
                   'usernumber' => 1,
                   'order' => 'XX', 
                   'part_number' => 'Hi'
                  ),
            array ('location' => 'X33',
                   'usernumber' => 1,
                   'order' => 'XX',
                   'part_number' => '68730' 
                   ),
            array ('location' => 'W33',
                   'usernumber' => 2,
                   'order' => 'YY',
                   'part_number' => '68741'
                   ),
            array ('location' => 'W33',
                   'usernumber' => 2,
                   'order' => 'YY',
                   'part_number' => 'Hello'
                  )
        );
    
    $out = array();
    $index = $arr[0]['usernumber'];
    foreach($arr as $val){
        if($index != $val['usernumber'])
            $index = $val['usernumber'];
        $out[$index][] = $val;
    }
    echo '<pre>';
    print_r($out);