сортирующий массив, основанный на ключевом значении inner-array

У меня есть массив, подобный приведенному ниже

Array ( [6] => Array ( [name] => Extras [total_products] => 0 [total_sales] => 0 [total_affiliation] => 0 ) [5] => Array ( [name] => Office Products [total_products] => 7 [total_sales] => 17 [total_affiliation] => 8 ) [1] => Array ( [name] => Hardware Parts [total_products] => 6 [total_sales] => 0 [total_affiliation] => 0 ) ) 

Прямо сейчас, заказ: Дополнительно, Офисные продукты, Детали оборудования

Я хочу отсортировать основной массив таким образом, чтобы он был упорядочен по total_sales внутреннего массива в порядке desc

поэтому заказ будет: Офисные продукты, комплектующие, комплектующие

Любые помощники

PHP 5.3:

 usort($array, function ($a, $b) { return $b['total_sales'] - $a['total_sales']; }); 

PHP 5.2-:

 usort($array, create_function('$a,$b', 'return $b["total_sales"] - $a["total_sales"];')); 

Вот класс, который вы можете использовать для создания многомерного пространства

Примечание. У вас должен быть PHP5

 class MultiDimensionSort { const ASCENDING = 0,DESCENDING = 1; public $sortColumn,$sortType; public function __construct($column = 'price', $type = self::ASCENDING) { $this->column = $column; $this->type = $type; } public function cmp($a, $b) { switch($this->type) { case self::ASCENDING: return ($a[$this->column] == $b[$this->column]) ? 0 : (($a[$this->column] < $b[$this->column]) ? -1 : 1); case self::DESCENDING: return ($a[$this->column] == $b[$this->column]) ? 0 :(($a[$this->column] < $b[$this->column]) ? 1 : -1); default: assert(0); // unkown type } } } 

Подобно тому, как у вас есть массив с именем summary с содержимым над массивом. чем вы можете сортировать, следуя инструкциям. // Предполагая, что ваша переменная массива равна $summary

 $s = new MultiDimensionSort('total_sales', MultiDimensionSort::DESCENDING); // sort by total_sales usort($summary, array($s, 'cmp')); print"<pre>";print_r($summary); 

Ура! Может быть, это поможет вам

Используйте пользовательскую функцию и usort :

 <?php function custom_sale_sort($a, $b) { if ($a['total_sales'] < $b['total_sales']) return 1; elseif ($a['total_sales'] == $b['total_sales']) return 0; else return -1; } usort($array, 'custom_sale_sort'); 

Если вам нужен ваш массив, отсортированный в другом направлении, затем переключите значения (1,-1) в пользовательской функции.