PHP的排序基于另一个数组的键值数组
问题描述:
我有一个数组:PHP的排序基于另一个数组的键值数组
$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
答
顺序正如@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);
答
使用时只需将第一个阵列作为一个“权重” -provider:但是,如果你是一个初学者这样可能会更容易理解。我的意思是第一个数组对第二个数组的每个条目都有一个权重(例如,M得到权重4)。
循环第二阵列上,并创建一个THRID之一:$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')
答
感谢所有为你建议
我一个人发现这个解决方案:
我的错误是聚焦阵列上进行排序($ arrat_to_sort)
,而不是我打开问题:
as $ array_sorter总是包含所有可能的值$ arrat_to_sort 以正确的顺序,我使用了函数array_intersect($ array_sorter,$ arr at_to_sort)
,马上我有$ a的值的数组中的$ array_sorter位置
你已经尝试过什么所以,什么是您预期的结果arrat_to_sort? –
你是什么意思'基于第一个'? – RGriffiths
可能的重复[我如何排序数组和数据在PHP?](http://stackoverflow.com/questions/17364127/how-can-i-sort-arrays-and-data-in-php) –