2015-10-07 3 views
2

Я пытаюсь создать простую программу, которая будет сравнивать ассоциативный массив на основе другого ассоциативного массива:Сортировка Два ассоциативного массив

$ArrayPriority = array("P1"=>3, "P2"=>5, "P3"=>1, "P4"=>1, "P5"=>4); 
$ArrayBurst = array("P1"=>1, "P2"=>2, "P3"=>5, "P4"=>6, "P5"=>9); 

Есть ли функция сортировки, чтобы произвести выход для $ArrayBurst:

P3 = 5 
P4 = 6 
P1 = 1 
P5 = 9 
P2 = 2 

В принципе, я хочу сортировать $ArrayBurst на основе $ArrayPriority, а затем отображать ключи и значения $ArrayBurst.

На данный момент, я могу разобраться только $ArrayPriority на основе значений, и я использовал array_multisort сделать так:

array_multisort(array_values($ArrayPriority), SORT_ASC, array_keys($ArrayPriority), SORT_ASC, $ArrayPriority); 

, который организует $ArrayPriority на:

P3 = 1 
P4 = 1 
P1 = 3 
P5 = 4 
P2 = 5 
+1

Куда вы придумали этот выход. Какова формула? – PHPglue

+0

Должен ли он быть стабильным? Или [6, 5, 1, 9, 2] также приемлемы? –

ответ

0

Нужно ли иметь такой же порядок, установленный в $ArrayPriority, если они имеют одинаковое значение в $ArrayPriority? Если нет, это должно сработать.

<?php 

$ArrayPriority = array("P1"=>3, "P2"=>5, "P3"=>1, "P4"=>1, "P5"=>4); 
$ArrayBurst = array("P1"=>1, "P2"=>2, "P3"=>5, "P4"=>6, "P5"=>9); 

asort($ArrayPriority); 
$output = []; 
foreach($ArrayPriority as $key => $value) { 
    echo "<p>" . $key . " = " . $ArrayBurst[$key] . "</p>"; 
} 

?> 
0

Как об этом?

<? 
    $ArrayPriority = array("P1"=>3, "P2"=>5, "P3"=>1, "P4"=>1, "P5"=>4); 
    $ArrayBurst = array("P1"=>1, "P2"=>2, "P3"=>5, "P4"=>6, "P5"=>9); 

    uasort($ArrayPriority, function ($p, $n) { return $p - $n;}); 
    uksort($ArrayBurst, function ($p, $n) use($ArrayPriority) { 
    return $ArrayPriority[$p] - $ArrayPriority[$n]; 
    }); 

    echo '<pre>' . print_r(array($ArrayPriority, $ArrayBurst), 1) . '</pre>'; 

И online pad

P.S. U может изменить код, чтобы сохранить порядок очередей с одним и тем же приоритетом, т. Е. Обрабатывать P3 раньше, чем P4 в соответствии с порядком $ArrayPriority.

Смежные вопросы