2016-08-23 3 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

То, что вы пытались так и для того, что это ваш ожидаемый результат? –

+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)

вместо этого я поставил проблему:

как $ array_sorter всегда содержит все возможные значения $ arrat_to_sort в правильном порядке, я использовал функцию array_intersect ($ array_sorter, $ arr at_to_sort)

и сразу же у меня есть массив со значениями $ arrat_to_sort в $ положении array_sorter

Смежные вопросы