1

初学者在这里。我有两个数组,一个包含我的值($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 但它没有按值对数组进行排序,它只是以某种方式把它搞砸了。如果有人有答案,我将不胜感激。非常感谢你!

4

1 回答 1

3

使用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 个条目

于 2013-06-17T15:27:59.503 回答