У меня есть массив, подобный приведенному ниже
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)
в пользовательской функции.