php根据另一个数组的键值对数组进行排序
我有一个数组:php根据另一个数组的键值对数组进行排序,php,arrays,Php,Arrays,我有一个数组: $array_sorter = [ 'XXS' => 1, 'XS' => 2, 'S' => 3, 'M' => 4, 'L' => 5, 'XL' => 6,
$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')
$weightArray = array();
foreach($array_to_sort as $value){
$weight = $array_sorter[$value];
if(!isset($weightArray[$weight])){
$weightArray[$weight] = array();
}
$weightArray[$weight][] = $value;
}
$array_to_sort = array_values(ksort($weightArray));
如何根据第一个对第二个进行排序
我的意思是:
$array_to_sort是大小,但在此数组中是随机的
我需要打印可用尺寸的列表($array_to_sort),但按照@Jakumi所述的$array_sorter的顺序,这是最好的选择。但是,如果您是初学者,这种方法可能更容易理解:
$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);
只需将第一个数组用作“权重”提供程序。我的意思是,第一个数组对第二个数组的每个条目都有一个权重(例如,M得到权重4) 循环第二个数组并创建第三个数组:
$weightArray
,如下所示:
$array_to_sort = ('XS','M','XL','S','L','XXS')
$weightArray = array();
foreach($array_to_sort as $value){
$weight = $array_sorter[$value];
if(!isset($weightArray[$weight])){
$weightArray[$weight] = array();
}
$weightArray[$weight][] = $value;
}
$array_to_sort = array_values(ksort($weightArray));
现在有了这样一个数组:(2=>'XS',4=>'M',5=>'XL',3=>'S',5=>'L',1=>'XXS')
现在,您可以按键ksort()
对其进行排序,并将其复制回源数组,如下所示:
$array_to_sort = ('XS','M','XL','S','L','XXS')
$weightArray = array();
foreach($array_to_sort as $value){
$weight = $array_sorter[$value];
if(!isset($weightArray[$weight])){
$weightArray[$weight] = array();
}
$weightArray[$weight][] = $value;
}
$array_to_sort = array_values(ksort($weightArray));
PS:如果你有类似于
$array\u to_sort=('XS','M','M','L','XXS')
的东西,它也会起作用=>$array\u to_sort=('XXS','XS','M','M','M','L')
谢谢大家的建议
我独自找到了这个解决方案:
我的错误是集中在要排序的数组上($arrat\u to\u sort)
相反,我将问题转向:
由于$array_sorter始终包含$arrat_to_sort的所有可能值
按照正确的顺序,我使用了函数array\u intersect($array\u sorter,$arrat\u to\u sort)
我马上在$array\u sorter位置得到了一个值为$arrat\u to\u sort的数组您这样做的目的是什么,您的预期结果是什么?您所说的“基于第一个”是什么意思?它应该如何排序的可能重复?根据第一个数组的值,您的示例既不是字母顺序的,也不是数字顺序的。它看起来就像一个随机顺序。请更具体地说明您的期望。使用($array\u sorter)(或硬编码)关闭
,也可能重复