2015-10-07 238 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。