@lostinvlg

Сортировка вложенных многомерных массивов?

Добрый день! Есть массив вида:

$books = array(
	array(
		"book" => "От простого сложного",
		"autor" => "Иванов А.А.",
		"prices" => array(
			array(
				"price" => 354
			),
			array(
				"price" => 294
			),
			array(
				"price" => 280
			)
		)
	),
	array(
		"brand" => "Наука и мир",
		"autor" => "Петров С.А.",
		"prices" => array(
			array(
				"price" => 798
			),
			array(
				"price" => 657
			),
			array(
				"price" => 812
			)
		)
	)
);


Необходимо выполнить сортировку по авторам, а также для каждого, сортировку по ценам.
С сортировкой по автору проблем не возникает, array_multisort(так же как и usort) прекрасно справляется с этим. А вот как отсортировать массивы по цене?
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 1
@lostinvlg Автор вопроса
Сделал рабочий вариант:
// Порядок сортировки
$sort_type_autor = 'ASC';
$sort_type_price = 'ASC';

for($i = 0; $i<count($books); $i++) {
	// Массив ключ-значение для array_multisort
	$sort_autor[$i] = $books[$i]['autor'];
	// Сортируем по ценам в каждом товаре
	foreach($books[$i]['prices'] as $k=>$v) {
		switch($sort_type_price) {
			case 'DESC':
				arsort($books[$i]['prices']);
				break;
			case 'ASC':
				asort($books[$i]['prices']);
				break;
		}
	}
}

// Сортируем по авторам
switch($sort_type_autor) {
	case 'DESC':
		array_multisort($sort_autor, SORT_DESC, $books);
		break;
	case 'ASC':
		array_multisort($sort_autor, SORT_ASC, $books);
		break;
}


Возможно бывает более "элегантное" решение?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы