2015-03-12 3 views
1

Я знаю, что этот вопрос задан много раз, но мне еще предстоит увидеть массив, построенный таким образом. Я пробовал некоторые из многочисленных примеров, которые я нашел, но никто, кажется, не делает этого.как отсортировать многомерный массив в php

Я редактирую программу PHP, которая создает выпадающий список ставок ИБП. Функции этой программы создают массив, который структурирован таким образом. Я хотел бы отсортировать этот массив по [цене].

Array 
(

    [price] => Array 

     (

      [0] => 617.75 

      [1] => 632.97 

      [2] => 782.77 

      [3] => 597.93 

      [4] => 337.00 

     ) 


    [option_value] => Array 

     (

      [0] => 07 

      [1] => 08 

      [2] => 54 

      [3] => 65 

      [4] => 11 

     ) 


    [option_name] => Array 

     (

      [0] => WorldWide Express 

      [1] => WorldWide Expedited 

      [2] => WorldWide Express Plus 

      [3] => International Saver 

      [4] => International Standard 

     ) 


) 
+0

Не могли бы вы показать нам эти многочисленные попытки? –

+0

Предполагая, что другие массивы не имеют отношения к массиву цен: 'natsort ($ array ['price']);' –

+0

@ ʰᵈˑ Я бы этого не предполагал. – AbraCadaver

ответ

1

Для восходящих, я хотел бы попробовать:

array_multisort($array['price'], SORT_ASC, $array['option_value'], $array['option_name']); 

Для того, чтобы идти вместе с другой ответ реструктурировать массив:

foreach($array['price'] as $key => $value) { 
    $result[] = array('price'=>$array['price'][$key], 
         'option_value'=>$array['option_value'][$key], 
         'option_name'=>$array['option_name'][$key]); 
} 
array_multisort(array_column($result, 'price'), SORT_ASC, $result); 
+0

Большое спасибо. Я попробовал функцию array_mutisort, но не использовал ее должным образом. – user3245915

0
<?php 
$ar = array(
     array("10", 11, 100, 100, "a"), 
     array( 1, 2, "2", 3, 1) 
    ); 
array_multisort($ar[0], SORT_ASC, SORT_STRING, 
       $ar[1], SORT_NUMERIC, SORT_DESC); 
var_dump($ar); 
?> 

array1_sort_order

Порядок используется для сортировки предыдущего аргумента массива. Или SORT_ASC сортировать по возрастанию или SORT_DESC сортировать по убыванию.

Этот аргумент может быть заменен на array1_sort_flags или полностью опущен, и в этом случае предполагается SORT_ASC.

Сортировка флаги Тип:

SORT_REGULAR - сравнивать элементы нормально (не изменять типы)
SORT_NUMERIC - сравнивать элементы численно
SORT_STRING - сравнивать элементы как строки
SORT_LOCALE_STRING - сравнить элементы как строки, основанные на текущей локали. Он использует языковой стандарт, который может быть изменен с помощью Setlocale()
SORT_NATURAL - сравнивать элементы как строки, используя «естественный порядок» как natsort()
SORT_FLAG_CASE - могут быть объединены (побитовое ИЛИ) с SORT_STRING или SORT_NATURAL к сортировки строк регистронезависимо

SRC: Example #2 Sorting multi-dimensional array

1

Во-первых, я бы реорганизовать набор данных в нечто разумное:

$i = 0; 
    $result = []; 
    while($i < count($source['price'])) { 
     $result[$i] = [ 
       'price' => $source['price'][$i], 
       'option_value' => $source['option_value'][$i], 
       'option_name' => $source['option_name'][$i] 
      ]; 
     ++$i; 
    } 

Затем сортировать результат с помощью usort:

function sort_by_price($a, $b) { 
if ($a['price'] == $b['price']) { 
    return 0; 
} 
    return ($a['price'] < $b['price']) ? -1 : 1; 
} 
usort($result, "sort_by_price"); 
1

что я буду делать это

$price = $array['price']; 
asort($price); 
foreach($price as $key=>$val){ 
    echo $val.'='.$array['option_value'][$key].'='.$array['option_name'][$key].'<br />'; 
} 

Я использовал asort для сортировки значения ASC и сохранения ключа массива. вы также можете использовать arsort для сортировки значения массива DESC.

asort: http://php.net/manual/en/function.asort.php

arsort: http://php.net/manual/en/function.arsort.php