合并两个数组然后对它们进行排序

时间:2013-06-17 15:26:08

标签: php sorting merge associative-array

初学者。我有两个数组,一个包含我的值( $ m1 ),另一个包含我想用作键( $ pn )(非唯一字符串)。它们具有相同的长度(465),$ pn [0]是$ m1 [0]值的关键。我使用类似这样的foreach循环将它们合并成为键值对:

$result = array ();
foreach($pn as $key => $value){
    $result[] = array($value => $m1[$key]);
}

如果我这样做并在$ result上尝试print_r,我会看到分配了键和值。现在我需要获得93个最大值及其相应的键。我尝试使用asort但它没有按值对数组进行排序,它只是以某种方式搞砸了它。如果有人有答案我会非常感激。非常感谢你!

1 个答案:

答案 0 :(得分:2)

使用array_combine()

创建组合数组
$result = array_combine(
    $pn,
    $m1
);

然后asort(),记住参数是通过引用

传递的
asort($result);

修改

如果您有非唯一键,则使用循环构建组合数组:

$result = array();
foreach($pn as $key => $value){
    $result[] = array('key' => $m1[$key], 'value' => $value);
}

然后使用usort()对数组进行排序:

usort(
    $result,
    function ($a, $b) {
        if ($a['value'] == $b['value']) {
            return 0;
        }
        return ($a['value'] > $b['value']) ? -1 : 1;
    }
);

使用array_slice()提取前93个条目