Сортировка многомерного массива в PHP


Если появляется необходимость, отсортировать многомерный массив по какому-то значению в нужном ключе в PHP, обычная функция сортировки массива для этого случая не подойдёт. Для таких случаев в PHP есть функция usort, которая позволит использовать пользовательскую функцию,  чтобы отсортировать многомерный массив так, как нам хочется.  

Допустим, есть такой массив:
$multiplearray[‘key’][‘color’]  => ‘red’;
$multiplearray[‘key’][‘order’] => ‘5’;

$multiplearray[‘key’][‘color’]  => ‘black’;
$multiplearray[‘key’][‘order’] => ‘3’;

$multiplearray[‘key’][‘color’]  => ‘white’;
$multiplearray[‘key’][‘order’] => ‘2’;

$multiplearray[‘key’][‘color’]  => ‘green’;
$multiplearray[‘key’][‘order’] => ‘4’;

$multiplearray[‘key’][‘color’]  => ‘grey’;
$multiplearray[‘key’][‘order’] => ‘1’;

Нужно отсортировать массив по значению, которые находятся в ключе «order». Для этого используем код, приведённый ниже

<?php
function build_sorter($key){ /* Алгоритм для сортировки массива */
	return function($a, $b) use ($key){
		return strnatcmp($a[$key], $b[$key]); /* Используем PHP функцию strnatcmp, для более точного сравнения значений */
	}
}

usort($multiplearray['key'], build_sorter('order')); /* PHP функция сортировки с созданным алгоритмом */
?>

В итоге, после применения функции + алгоритма сортировки, получится такой массив:
$multiplearray[‘key’][‘color’]  => ‘grey’;
$multiplearray[‘key’][‘order’] => ‘1’;

$multiplearray[‘key’][‘color’]  => ‘white’;
$multiplearray[‘key’][‘order’] => ‘2’;

$multiplearray[‘key’][‘color’]  => ‘black’;
$multiplearray[‘key’][‘order’] => ‘3’;

$multiplearray[‘key’][‘color’]  => ‘green’;
$multiplearray[‘key’][‘order’] => ‘4’;

$multiplearray[‘key’][‘color’]  => ‘red’;
$multiplearray[‘key’][‘order’] => ‘5’;


Для связи

Если у вас появились какие-либо вопросы, хотите получить индивидуальный совет или у вас есть интересное предложение, вы можете связаться через форму обратной связи.

Или написать прямо на почту info@bobreod.ru





Отправляя форму, вы соглашаетесь с нашей политикой конфиденциальности