2016-08-23 211 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位置