我试图按特定顺序对多维数组进行排序。我的数组看起来像这样:
array (size=4)
'1574764780' =>
array (size=4)
0 =>
array (size=3)
'name' => string 'x' (length=1)
'nr' => string '5' (length=1)
'color' => string 'red' (length=3)
1 =>
array (size=3)
'name' => string 'y' (length=1)
'nr' => string '6' (length=1)
'color' => string 'yellow' (length=6)
2 =>
array (size=3)
'name' => string 'z' (length=1)
'nr' => string '4' (length=1)
'color' => string 'blue' (length=4)
3 =>
array (size=3)
'name' => string 'a' (length=1)
'nr' => string '2' (length=1)
'color' => string 'green' (length=5)
'36879010280' =>
...
我需要对它进行排序,使颜色为红色的数组排在首位,绿色为第二排,依此类推:按键颜色的顺序应为:
red,green,blue,yellow。
但是,并非每个阵列都包含绿色。然后应该是这样的:
red,blue,yellow
输出应为:
array (size=4)
'1574764780' =>
array (size=4)
0 =>
array (size=3)
'name' => string 'x' (length=1)
'nr' => string '5' (length=1)
'color' => string 'red' (length=3)
1 =>
array (size=3)
'name' => string 'a' (length=1)
'nr' => string '2' (length=1)
'color' => string 'green' (length=5)
2 =>
array (size=3)
'name' => string 'z' (length=1)
'nr' => string '4' (length=1)
'color' => string 'blue' (length=4)
3 =>
array (size=3)
'name' => string 'y' (length=1)
'nr' => string '6' (length=1)
'color' => string 'yellow' (length=6)
'36879010280' =>
...
我一直在搜索数小时,但找不到一个好的方法来做到这一点。任何帮助深表感谢。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在PHP中,你可以使用usort()
函数来根据你自定义的规则对多维数组进行排序。在这个例子中,你需要基于颜色的特定顺序来排序。以下是一个示例代码,展示了如何实现你的需求:
<?php
// 定义颜色排序的顺序
$colorOrder = ['red', 'green', 'blue', 'yellow'];
// 自定义排序函数
function sortByColor($a, $b) {
global $colorOrder;
$indexA = array_search($a['color'], $colorOrder);
$indexB = array_search($b['color'], $colorOrder);
// 如果颜色不在预设的顺序中,则认为它应该排在最后
if ($indexA === false) $indexA = count($colorOrder);
if ($indexB === false) $indexB = count($colorOrder);
return $indexA - $indexB; // 升序排序
}
// 假设你的多维数组名为$data
$data = [
'1574764780' => [
// ... 你的数据 ...
],
// 其他数据...
];
// 遍历外层数组,对每个子数组应用排序
foreach ($data as &$subArray) {
usort($subArray, 'sortByColor');
}
unset($subArray); // 取消引用,避免意外修改
// 输出排序后的数组
print_r($data);
?>
这段代码首先定义了一个颜色排序的顺序数组$colorOrder
,然后定义了一个自定义排序函数sortByColor
,该函数通过查找元素颜色在$colorOrder
中的位置来进行比较。如果颜色没有出现在预设的顺序中,我们将其索引设置为颜色列表的长度,这样它就会被排在最后。
接下来,遍历多维数组的每个子数组,并使用usort()
函数和我们的自定义排序函数对其进行排序。注意,这里使用了引用&$subArray
以直接修改原数组。
请确保将上述代码中的示例数据替换为你实际的数据结构。