2016-08-23 145 views
-1

我有一个数组: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

+0

你已经尝试过什么所以,什么是您预期的结果arrat_to_sort? –

+0

你是什么意思'基于第一个'? – RGriffiths

+2

可能的重复[我如何排序数组和数据在PHP?](http://stackoverflow.com/questions/17364127/how-can-i-sort-arrays-and-data-in-php) –

回答

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); 
0

使用时只需将第一个阵列作为一个“权重” -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')

0

感谢所有为你建议

我一个人发现这个解决方案:

我的错误是聚焦阵列上进行排序($ arrat_to_sort)

,而不是我打开问题:

as $ array_sorter总是包含所有可能的值$ arrat_to_sort 以正确的顺序,我使用了函数array_intersect($ array_sorter,$ arr at_to_sort)

,马上我有$ a的值的数组中的$ array_sorter位置