如何将php关联数组按特定顺序排序?

如何将php关联数组按特定顺序排序?,php,arrays,Php,Arrays,这是我喜欢按特定顺序排序的数组 $aData = Array ( [break] => Array ( [Indoor room] => 42 [Gym Class] => 19 ) [finish] => Array ( [Indoor room] => 42 [Gym Class] => 19

这是我喜欢按特定顺序排序的数组

$aData = Array
  (
    [break] => Array
        (
            [Indoor room] => 42
            [Gym Class] => 19
        )
    [finish] => Array
        (
            [Indoor room] => 42
            [Gym Class] => 19
        )

    [lunch] => Array
        (
            [Indoor room] => 7
        )

    [period1] => Array
        (
            [Indoor room] => 12
            [Gym Class] => 22
        )

    [period2] => Array
        (
            [Gym Class] => 14
            [Indoor room] => 25
        )

    [period3] => Array
        (
            [Gym Class] => 21
            [Indoor room] => 11
        )

    [period4] => Array
        (
            [Gym Class] => 22
            [Indoor room] => 20
        )

    [period5] => Array
        (
            [Gym Class] => 16
            [Indoor room] => 9
        )

)
但我喜欢这样的顺序:

break, period1, period2, lunch, period3, period5, period6, finish
为此,我尝试以下php代码

$arraySort = [
  "break",  
  "period1", 
  "period2", 
  "period3", 
  "lunch",
  "period4",
  "period5", 
  "period6", 
  "finish" 
];

   foreach($aData as $period => $catsScore){
  echo 'test '.$period.'<br/>';  
  $periodItem = [$period];
  foreach($arraySort as $cat){
      echo 'new: '.$cat.'<br/>';
      $periodItem[] = $catsScore;
  }
  $output[] = $periodItem;
    }


print_r($output);
$arraySort=[
“休息”,
“第1期”,
“第2期”,
“第3期”,
“午餐”,
“第4期”,
“第5期”,
“第6期”,
“完成”
];
foreach($aData作为$period=>$catsScore){
回显“测试”。$period.
; $periodItem=[$period]; foreach($ArraySortas$cat){ 回显“新:”.$cat.“
”; $periodItem[]=$CatsCore; } $output[]=$periodItem; } 打印(输出);
简单-只需使用
数组排序
作为关联键,并从原始数组中获取相应的数组/值

<?php

$arraySort = [
  "break",  
  "period1", 
  "period2", 
  "period3", 
  "lunch",
  "period4",
  "period5", 
  "period6", 
  "finish" 
];

$final_array = [];

foreach($arraySort  as $arraySo){
  $final_array[$arraySo] = $aData[$arraySo];
}

print_r($final_array);

为此,您可以使用
array\u combine

$arrary_sort = ["break", "period1"];
$final_array = array_combine($array_sort, $your_array_here);

生成正确排序的数组并按源数组中的值填充

$final_array = array_replace(array_fill_keys($arraySort, []), $aData);

或者,您可以使用实际的排序功能:

uksort(
    $aData,
    function($a,$b)use($arraySort){
        return array_search($a, $arraySort) - array_search($b, $arraySort);
    }
);

谢谢你,这是我能理解的。您只需使用arraySort作为assoc键,并从原始数组中获取相应的数组/值,对吗?@alex yes。这很容易。我想,ray_combine速度更快,看起来更简单。用你的输入试试。我认为这是行不通的:-顺便说一句,这是另一个Alex array\u组合不是办法,我认为这将只是“重命名”现有值,而不是正确地对它们重新排序您更改键但不重新排序数组