我有一些来自Feed的杂乱数据,我正在试图找出如何正确排序。我在下面发布了一个简化示例。我想按组名称按字母顺序对人员数组进行排序。
$people = array(
"category_id_1" => array (
"Mark",
"Jenny",
"Andrew"
),
"category_id_2" => array (
"John",
"Lewis",
"Andrea"
),
"category_id_3" => array (
"Hannah",
"Angie",
"Raleigh"
)
);
$categories = array(
"category_id_1" => "Group B",
"category_id_2" => "Group C",
"category_id_3" => "Group A"
);
理想情况下,最终结果是
$people = array(
"category_id_3" => array ( // Group A
"Hannah",
"Angie",
"Raleigh"
),
"category_id_1" => array ( // Group B
"Mark",
"Jenny",
"Andrew"
),
"category_id_2" => array ( // Group C
"John",
"Lewis",
"Andrea"
)
);
我一直在旋转我的车轮一段时间了,而我最接近的就是这个uasort,它仍然没有做到这一点。
uasort($people, function ($a, $b) {
return strcmp($categories[$a], $categories[$b]);
});
非常感谢您的帮助。
答案 0 :(得分:1)
这可以通过利用array_replace
:
// Work on a copy just to be sure the rest of your code is not affected
$temp_categories = $categories;
// Sort categories by name
asort($temp_categories);
// Replace the values of the sorted array with the ones in $people
$ordered_people = array_replace($temp_categories, $people);
答案 1 :(得分:0)
您希望按键$people
而不是其值进行排序。您可以使用uksort
。此外,您需要在功能中使$categories
可用。我更喜欢use
;但你也可以把它变成一个全局变量。最终代码:
uksort($people, function ($a,$b) use ($categories) {
return strcmp($categories[$a], $categories[$b]);
});
use language construct。在例3之前。
答案 2 :(得分:-1)
试试这个(测试和工作):
asort($categories);
$sorted = array();
foreach ($categories as $key => $value)
$sorted[$key]=$people[$key];
更短的方法:(测试和工作)
asort($categories);
$result = array_merge($categories,$people);
第二种方法利用了这样一个事实:当键相同时,array_merge函数将第一个数组中的值替换为第二个数组中的值。
警告 :如果密钥是数字,则第二种方法无效。只使用字符串键。此外,如果categories数组在people数组中没有相应条目的条目,则它们将被复制到结果
要解决此问题,我们使用array_replace:
asort($categories);
$result = array_replace($categories,$people);
Var_dump($result);// tested and working
答案 3 :(得分:-1)
我认为你需要的是Asort类别以及在foreach中使用排序数组。
Asort($categories);
Foreach($categories as $key => $group){
$new[$key] =$people[$key];
}
Var_dump($new);
输出:
array(3) {
["category_id_3"]=> array(3) {
[0]=> "Hannah"
[1]=> "Angie"
[2]=> "Raleigh"
}
["category_id_1"]=> array(3) {
[0]=> "Mark"
[1]=> "Jenny"
[2]=> "Andrew"
}
["category_id_2"]=>array(3) {
[0]=> "John"
[1]=> "Lewis"
[2]=> "Andrea"
}
}