php根据另一个数组的键值对数组进行排序

时间:2016-08-23 08:29:52

标签: php arrays

我有一个数组:

 $array_sorter = [  
                    'XXS' => 1,   
                    'XS' => 2,  
                    'S' => 3,   
                    'M' => 4,   
                    'L' => 5,   
                    'XL' => 6,   
                    'XXL' => 7  
                 ];

另一个可能是这样的:

 $array_to_sort = ('XS','M','XL','S','L','XXS')

如何根据第一个对第二个进行排序?

我的意思是:

$ array_to_sort是大小,但它们在此数组中是随机的

我需要打印可用尺寸列表($ array_to_sort),但是按$ array_sorter

的顺序

3 个答案:

答案 0 :(得分:0)

正如@Jakumi所述,usort将成为可能。但是,如果您是初学者,这种方式可能更容易理解:

$array_sorter = [
    'XXS' => 1,
    'XS' => 2,
    'S' => 3,
    'M' => 4,
    'L' => 5,
    'XL' => 6,
    'XXL' => 7,
];

$array_to_sort = array('XS', 'M', 'XL', 'S', 'L', 'XXS');

$array_sorted = array();

foreach($array_to_sort as $item){
    $k = $array_sorter[$item];
    $array_sorted[$k] = $item;
}
ksort($array_sorted);

答案 1 :(得分:0)

只需将第一个数组用作“权重” - 提供者。我的意思是第一个数组对第二个数组的每个条目都有一个权重(例如M得到权重4)。

遍历第二个数组并创建一个第三个数组:$weightArray,如下所示:

$weightArray = array();
foreach($array_to_sort as $value){
  $weight = $array_sorter[$value];
  if(!isset($weightArray[$weight])){
    $weightArray[$weight] = array();
  }
  $weightArray[$weight][] = $value;
}

现在你有一个这样的数组:(2=>'XS', 4=>'M', 5=>'XL', 3=>'S', 5=>'L', 1=>'XXS')

现在您可以按键ksort()对其进行排序,然后将其复制回源数组,如下所示:

$array_to_sort = array_values(ksort($weightArray));

PS:如果您有类似$array_to_sort = ('XS','M','M','M','L','XXS')的内容,它也会起作用=> $array_to_sort = ('XXS','XS','M','M','M','L')

答案 2 :(得分:0)

感谢大家的建议

我独自找到了这个解决方案:

我的错误是关注要排序的数组($ arrat_to_sort)

而是我解决了问题:

as $ array_sorter始终包含$ arrat_to_sort的所有可能值 按正确的顺序,我使用函数array_intersect($ array_sorter,$ arrat_to_sort)

我立即在$ array_sorter位置有一个值为$ arrat_to_sort的数组