Задать вопрос

Как отсортировать массив по значениям нескольких ключей?

Есть массив объектов. допустим для жилого дома:

[1] => array( 'Тип' => 'Квартира', "Номер объекта" => '4', 'ID' => '333'),
[2] => array( 'Тип' => 'Квартира', "Номер объекта" => '7', 'ID' => '444'),
[3] => array( 'Тип' => 'Машиноместо', "Номер объекта" => '3', 'ID' => '555' ),
[4] => array( 'Тип' => 'Машиноместо', "Номер объекта" => '2', 'ID' => '777' ),
[5] => array( 'Тип' => 'Квартира', "Номер объекта" => '2', 'ID' => '888'),


Как отсортировать этот массив, чтобы сначала были элементы одного типа, затем другого, и при этом шли по возрастанию по значению "Номера объекта"?

То есть чтобы выстроились так:

[5] => array( 'Тип' => 'Квартира', "Номер объекта" => '2', 'ID' => '888'),
[1] => array( 'Тип' => 'Квартира', "Номер объекта" => '4', 'ID' => '333'),
[2] => array( 'Тип' => 'Квартира', "Номер объекта" => '7', 'ID' => '444'),
[4] => array( 'Тип' => 'Машиноместо', "Номер объекта" => '2', 'ID' => '777' ),
[3] => array( 'Тип' => 'Машиноместо', "Номер объекта" => '3', 'ID' => '555' ),
  • Вопрос задан
  • 223 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
vekov
@vekov Автор вопроса
Спасибо за ссылку на мультисорт, Владислав Тишин .
Среди примеров там нашел нужное решение:

function array_orderby()
{
	$args = func_get_args();
	$data = array_shift($args);
	foreach ($args as $n => $field) {
		if (is_string($field)) {
			$tmp = array();
			foreach ($data as $key => $row)
				$tmp[$key] = $row[$field];
				$args[$n] = $tmp;
		}
	}
	$args[] = &$data;
	call_user_func_array('array_multisort', $args);
	return array_pop($args);
}

$arObjects = array_orderby($arObjects, 'Тип', SORT_ASC, 'Номер объекта', SORT_ASC);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
vladgba
@vladgba
(。◕‿‿◕。)
Комментировать
Austin_Powers
@Austin_Powers
Web developer (Symfony, Go, Vue.js)
Если данный массив результат запроса к БД, то лучше отсортировать в sql запросе с помощью order by
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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