2015-10-07 244 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 

基本上,我想根據$ArrayPriority$ArrayBurst進行排序,然後顯示$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

附: U可以改變代碼以保持具有相同優先級的脈衝串的順序,即根據$ArrayPriority的密鑰的順序來處理比P4更早的P3。