我有两个像这样的数组:
数组(键是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"
最简单的方法是什么?谢谢
试试这个
asort($arr2);
$finalArr=[];
foreach($arr2 as $key => $value){
$finalArr[$key]=$arr1[$key];
}
我们正在排序和维护索引关联(asort)
我们循环排序的数组并与第一个数组进行比较并存储到最终的数组
做你想做的事的一个简单方法是使用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);
?>
我建议你做的是:在其中创建带有关联数组的数组,因为这样会更具可读性
$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']
}
就这么简单,只需在回显中添加标签,或者打印即可
这对我有用:
<?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);
?>