使用相同键在另一个数组中按分数值对数组进行排序

问题描述 投票:0回答:4

我有两个像这样的数组:

数组(键是ID用户,值是名称)#1

[7] => "John Doe"
[12] => "Steve Jobs"
[20] => "Brad Pitt"

数组(键是ID用户,值是排序分数)#2

[7] => 45
[12] => 27
[20] => 50.5

排序后的预期结果(最低值第一,最高最后)

[12] => "Steve Jobs"
[7] => "John Doe"
[20] => "Brad Pitt"

最简单的方法是什么?谢谢

php arrays sorting
4个回答
2
投票

试试这个

asort($arr2);
$finalArr=[];
foreach($arr2 as $key => $value){
  $finalArr[$key]=$arr1[$key];
}

我们正在排序和维护索引关联(asort

我们循环排序的数组并与第一个数组进行比较并存储到最终的数组


2
投票

做你想做的事的一个简单方法是使用asort对数组进行排序,使用array_replace_recursive来合并值。 (Example

<?php

    $a = [
        7  => "John Doe",
        12 => "Steve Jobs",
        20 => "Brad Pitt"
    ];

    $b = [
        7  => 45,
        12 => 27,
        20 => 50.5
    ];

    asort($b);
    $result = array_replace_recursive($b,$a);

    print_r($result);

?>

0
投票

我建议你做的是:在其中创建带有关联数组的数组,因为这样会更具可读性

$people = [
    ['name' => 'John Doe', 'score' => 45],
    ['name' => 'Steve Jobs', 'score' => 27],
    ['name' => 'Brad Pitt', 'score' => 50.5],
]

并使用usort()进行排序 - 类似这样的事情:

function sortScores($a, $b) {
    return ($a['score'] - $b['score']);
}

usort($people, 'sortScores');

这更像是一个建议btw

编辑:

选择:

foreach ($people as $p) {
    echo $p['name']
}

就这么简单,只需在回显中添加标签,或者打印即可


0
投票

这对我有用:

<?php

$names[7] = "John Doe";
$names[12] = "Steve Jobs";
$names[20] = "Brad Pitt";

$ages[7] = 45;
$ages[12] = 27;
$ages[20] = 50.5;

// Sort second array on age values
asort($ages);

// Loop through sorted age array
foreach($ages as $key => $value) {

  // Get name and insert into new array
  $sortedArray[$key] = $names[$key];
}

// Print sorted names
print_r($sortedArray);
?>
© www.soinside.com 2019 - 2024. All rights reserved.