Как отсортировать несколько массивов в PHP

я написал сценарий для создания массива данных, но теперь хочу отобразить в порядке оценки. Массив выводится следующим образом.

[display_name] => Array ( [0] => ACT_Web_Designs [1] => user1_design [2] => user2_design ) [proffesion] => Array ( [0] => Web Developer [1] => web developer [2] => Web Developer ) [score] => Array ( [0] => 15 [1] => 6 [2] => 15 ) [img] => Array ( [0] => ./?0000=gif&0001=3fadb8c362ff39f3322909899ff14760&0002=prof_pic [1] => [2] => ) 

поэтому в двух словах я хочу, чтобы он был преобразован следующим образом;

  [display_name] => Array ( [0] => ACT_Web_Designs [1] => user2_design [2] => user1_design ) [proffesion] => Array ( [0] => Web Developer [1] => web developer [2] => Web Developer ) [score] => Array ( [0] => 15 [1] => 15 [2] => 6 ) [img] => Array ( [0] => ./?0000=gif&0001=3fadb8c362ff39f3322909899ff14760&0002=prof_pic [1] => [2] => ) 

Я смотрю на asort (), но не могу получить что-нибудь для работы. Любая помощь приветствуется.

Это именно то, где используется массив array_multisort PHP . Это случай, когда вы хотите отсортировать множество массивов на основе сравнения, происходящего только в одном из них.

Я изменил score массива, чтобы иметь разные значения.

 <?php $arr = array( 'display_name' => array('ACT_Web_Designs','user1_design','user2_design'), 'proffesion' => array('Web Developer','web developer','web developer'), 'score' => array(12,6,15), 'img' => array('./?0000=gif&0001=3fadb8c362ff39f3322909899ff14760&0002=prof_pic','','') ); var_dump($arr); array_multisort($arr['score'], SORT_ASC, SORT_NUMERIC, $arr['display_name'], $arr['proffesion'], $arr['img'] ); var_dump($arr); ?> 

Здесь идет рабочая демонстрация.

Как насчет этого более простого

 $arr = array("k"=>array("A","B","C"),"l"=>array(15,6,15),"n"=>array("k","l","n")); array_multisort($arr["k"],SORT_NUMERIC,SORT_DESC,$arr["l"],$arr["n"]); var_dump($arr); 

Разве это не работает, чтобы просто rsort массив баллов?

 rsort($data['score'], SORT_NUMERIC); 

Мне удалось это сделать, я был только после более эффективного способа;

 $array = array( 'display_name' => array(0 => 'ACT_Web_Designs', 1 => 'user1_design', 2 => 'user2_design' ), 'proffesion' => array( 0 => 'Web Developer', 1 => 'web developer', 2 => 'Web Developer' ), 'score' => array( 0 => 15, 1 => 6, 2 => 15 ), 'img' => array( 0 => './?0000=gif&0001=3fadb8c362ff39f3322909899ff14760&0002=prof_pic', 1 => '', 2 => '' ) ); arsort($array['score'], SORT_NUMERIC ); foreach($array['score'] as $key => $val ) { $newarray['display_name'][] = $array['display_name'][$key]; $newarray['proffesion'][] = $array['proffesion'][$key]; $newarray['score'][] = $array['score'][$key]; $newarray['img'][] = $array['img'][$key]; } print_r($newarray); 

возвращается

 Array ( [display_name] => Array ( [0] => ACT_Web_Designs [1] => user2_design [2] => user1_design ) [proffesion] => Array ( [0] => Web Developer [1] => Web Developer [2] => web developer ) [score] => Array ( [0] => 15 [1] => 15 [2] => 6 ) [img] => Array ( [0] => ./?0000=gif&0001=3fadb8c362ff39f3322909899ff14760&0002=prof_pic [1] => [2] => ) ) 

Использовать rsort ()

 <?php $fruits = array("lemon", "orange", "banana", "apple"); rsort($fruits); reset($fruits); while (list($key, $val) = each($fruits)) { echo "$key = $val\n"; } ?> 

В этом примере будет отображаться:

 0 = orange 1 = lemon 2 = banana 3 = apple 

Самое элегантное решение, которое я мог найти, не изменило бы порядок структуры данных, а просто обратилось бы к нему по-другому.

 $scores = $data['score']; arsort($scores); $keys_ordered_by_score = array_keys($scores); 

Теперь вы можете, скажем, захватить имя display_name и «proffesion», у которого самый высокий балл:

 $first_place = $keys_ordered_by_score[0]; echo $data['display_name'][$first_place], ' is a ', $data['proffesion'][$first_place]; 

Конечно, если вам действительно нужно изменить порядок структуры данных, эта идея бесполезна для вас. Любой другой ответ, использующий array_multisort (), скорее всего, удовлетворит эту потребность.

Это не будет сортировать их для вас, но это позволит вам пройти через них в том порядке, в котором вы хотите. Вы можете переназначить их, если хотите, но я бы просто использовал это для порядка вывода.

Изменить: это не сработает из-за возможности не-уникальных значений ключа. См. Комментарии ниже и узнайте из моей ошибки

 $sort_order = $array['score']; arsort($sort_order); $sort_order = array_flip($sort_order); foreach($sort_order as $key){ echo $array['display_name'][$key].' - '.$array['score'][$key]; }