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

时间:2018-01-04 13:58:22

标签: php arrays sorting

我有两个这样的数组:

数组(键是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"

实现这一目标的最简单方法是什么?感谢

4 个答案:

答案 0 :(得分:2)

试试这个

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

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

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

答案 1 :(得分: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);

?>

答案 2 :(得分: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']
}

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

答案 3 :(得分: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);
?>