php - 如何根据外部数组值优先级对多维PHP数组进行排序
问题描述
我在 PHP 中有一个多维数组,类似于:
$my_array_to_sort = [
"data" => [
[
"name" => "orange",
"id" => 23423,
],
[
"name" => "green",
"id" => 34343,
],
[
"name" => "red",
"id" => 65566,
],
],
];
我想根据名称重新排序此数组,同时使用如下所示的排序数组保留其结构和数据:
$priority = [
"red" => 1,
"orange" => 2,
"green" => 3,
];
这样最终的排序将导致
Array
(
[data] => Array
(
[0] => Array
(
[name] => red
[id] => 65566
)
[1] => Array
(
[name] => orange
[id] => 23423
)
[2] => Array
(
[name] => green
[id] => 34343
)
)
)
uasort() 是去这里的路吗?任何代码参考将不胜感激。
解决方案
您不需要uasort
,因为您没有尝试在要排序的数组中保留键。usort
就足够了,将$priority
数组传递给回调并根据每个条目名称的优先级进行排序:
usort($my_array_to_sort['data'], function ($a, $b) use ($priority) {
return $priority[$a['name']] - $priority[$b['name']];
});
print_r($my_array_to_sort);
输出:
Array
(
[data] => Array
(
[0] => Array
(
[name] => red
[id] => 65566
)
[1] => Array
(
[name] => orange
[id] => 23423
)
[2] => Array
(
[name] => green
[id] => 34343
)
)
)
要以相反的顺序排序,只需更改return
表达式中变量的顺序:
usort($my_array_to_sort['data'], function ($a, $b) use ($priority) {
return $priority[$b['name']] - $priority[$a['name']];
});
推荐阅读
- python - 通过 Python 从 Cloud Storage 到 BigQuery
- javascript - 计算解析的整数差时得到 NaN
- sql - 将多行合并为 1 - 更新表
- amazon-web-services - 如何配置 aws 事件桥以将事件作为内部或私有(VPC)发送到 URL
- flutter - 加载 tflite 模型颤振时失去与设备的连接
- python - 如何在 django 信号中以编程方式更新 m2m 字段
- java - Spring + MySQL 记录被复制而不是更新
- javascript - Intrexx - 通过 javascript 触发工作流
- php - Json 字符串在 2032 字节处被截断
- firebase - Flutter Firestore:通过参数更新对象数组