Php. Сортировка вложенных массивов с сохранением ключей


Ниже приведу пример достаточно сложной сортировки вложенных массивов, с сохранением, при этом ключей родительского массива.

Представим, что у нас есть массив, элементы которого — массивы, с значениями прихода и расхода. Наша задача — отсортировать массив с сохранением ключей (в примере child1, child2, …, childN) — по новому полю — saldo, которое равно разнице прибыли и расхода.

$data = array(
    'child1' => array( 'text'=>'str1', 'income'=>20, 'expanse'=>10 ),
    'child2' => array( 'text'=>'str2', 'income'=>21, 'expanse'=>10 ),
    'child3' => array( 'text'=>'str3', 'income'=>29, 'expanse'=>20 ),
    'child4' => array( 'text'=>'str4', 'income'=>20, 'expanse'=>30 ),
    'child5' => array( 'text'=>'str5', 'income'=>20, 'expanse'=>20 ),
    'child6' => array( 'text'=>'str6', 'income'=>21, 'expanse'=>10 ),
    'child7' => array( 'text'=>'str7', 'income'=>21, 'expanse'=>20 ),
    'child8' => array( 'text'=>'str8', 'income'=>29, 'expanse'=>20 )
);

$data_saldo=array();
foreach($data as $key=>$arr){
    $data[$key]['saldo']    =   $arr['income'] - $arr['expanse'] ;
    
    $data_saldo[$key] = $data[$key]['saldo'];
}
 
array_multisort($data_saldo, SORT_NUMERIC, $data);

echo '
' ;
print_r($data);
echo '

' ;

В результате получим массив, отсортированный по внутреннему значению ‘saldo’, с учетом изначально указанных ключей childN.

,

Добавить комментарий

Ваш адрес email не будет опубликован.