我有一个数组:
$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
的顺序答案 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的数组