开发者社区 问答 正文

按特定顺序对多维数组排序

我试图按特定顺序对多维数组进行排序。我的数组看起来像这样:

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' => 
           ...

我一直在搜索数小时,但找不到一个好的方法来做到这一点。任何帮助深表感谢。

展开
收起
几许相思几点泪 2019-12-03 15:53:53 459 分享 版权
阿里云 AI 助理回答

在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以直接修改原数组。

请确保将上述代码中的示例数据替换为你实际的数据结构。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: