RGameShow
@RGameShow
В поисках ответов на глупые вопросы

Как отсортировать массив по конкретному ключу?

Как отсортировать массив по ключу PRICE ?

Array
(
    [0] => Array
        (
            [INFO] => Array
                (
                    [ID] => 1
                    [NAME] => NAME_1
                    [DESC] => DESC_1
                )

            [PRICE] => 0
        )

    [1] => Array
        (
            [INFO] => Array
                (
                    [ID] => 2
                    [NAME] => NAME_2
                    [DESC] => DESC_2
                )

            [PRICE] => 500
        )
    [2] => Array
        (
            [INFO] => Array
                (
                    [ID] => 3
                    [NAME] => NAME_3
                    [DESC] => DESC_3
                )

            [PRICE] => 1
        )
)
  • Вопрос задан
  • 317 просмотров
Решения вопроса 2
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Как отсортировать многомерный массив в php?

<?php
array_multisort(array_column($array, 'PRICE'), SORT_ASC, $array);
Ответ написан
Комментировать
myks92
@myks92 Куратор тега PHP
Нашёл решение — пометь вопрос ответом!
Пример из документации:
$people = array( 
array("name"=>"Bob","age"=>8,"colour"=>"red"), 
array("name"=>"Greg","age"=>12,"colour"=>"blue"), 
array("name"=>"Andy","age"=>5,"colour"=>"purple")); 

var_dump($people); 

$sortArray = array(); 

foreach($people as $person){ 
    foreach($person as $key=>$value){ 
        if(!isset($sortArray[$key])){ 
            $sortArray[$key] = array(); 
        } 
        $sortArray[$key][] = $value; 
    } 
} 

$orderby = "name"; //change this to whatever key you want from the array 

array_multisort($sortArray[$orderby],SORT_DESC,$people); 

var_dump($people);


Output from first var_dump: 

[0]=&gt; 
  array(3) { 
    ["name"]=&gt; 
    string(3) "Bob" 
    ["age"]=&gt; 
    int(8) 
    ["colour"]=&gt; 
    string(3) "red" 
  } 
  [1]=&gt; 
  array(3) { 
    ["name"]=&gt; 

    string(4) "Greg" 
    ["age"]=&gt; 
    int(12) 
    ["colour"]=&gt; 
    string(4) "blue" 
  } 
  [2]=&gt; 
  array(3) { 
    ["name"]=&gt; 
    string(4) "Andy" 
    ["age"]=&gt; 
    int(5) 
    ["colour"]=&gt; 

    string(6) "purple" 
  } 
} 

Output from 2nd var_dump: 

array(3) { 
  [0]=&gt; 
  array(3) { 
    ["name"]=&gt; 
    string(4) "Greg" 
    ["age"]=&gt; 
    int(12) 
    ["colour"]=&gt; 
    string(4) "blue" 
  } 
  [1]=&gt; 
  array(3) { 
    ["name"]=&gt; 

    string(3) "Bob" 
    ["age"]=&gt; 
    int(8) 
    ["colour"]=&gt; 
    string(3) "red" 
  } 
  [2]=&gt; 
  array(3) { 
    ["name"]=&gt; 
    string(4) "Andy" 
    ["age"]=&gt; 
    int(5) 
    ["colour"]=&gt; 

    string(6) "purple" 
  }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Ответ написан
Комментировать
andrewbess
@andrewbess
Magento developer at Atwix
Попробуй как-то так
usort($array, function($a, $b) {
    if ($a['PRICE'] == $b['PROCE']) {
        return 0;
    }
    return ($a['PRICE'] < $b['PRICE']) ? -1 : 1;
});


$array - твой массив.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы