PHP Как упорядочить массив в порядке ABC со значения 1 его границ - PullRequest
0 голосов
/ 31 августа 2011

Хорошо, у меня есть такой массив:

$my_array = array(
    'hi' => array('description' => 'how are you?', 'title' => 'Hello', 'link' => 'http://mylink.com'),
    'bye' => array('description' => array('Goodbye!', 'see ya'), 'title' => 'See Ya Later', 'link' => 'http://mybyelink.com'),
    'not_now' => array('description' => array('I am away now!', 'gone'), 'title' => 'Away', 'link' => 'http://myawaylink.com'),
    'back' => array('description' => array('I am back now!', 'back', 'present'), 'title' => 'Here', 'link' => 'http://mybacklink.com'),
);

Итак, я бы хотел, чтобы массив как-то упорядочивался внутри кода php, чтобы он упорядочивал его по НАЗВАНИЮ каждого связанного массива: $my_array['hi']['title'], $my_array['bye']['title'], $my_array['not_now']['title'] и $my_array['back']['title'], но это НЕОБХОДИМО, чтобы массив оставался неизменным, чтобы все значения в пределах hi, bye, not_now и back были одинаковыми, а все массивы (если они есть, также одинаковы).

Таким образом, этот массив нужно будет упорядочить в порядке ABC в зависимости от title , поэтому он должен вернуться в следующем порядке:

$my_array = array(
    'not_now' => array('description' => array('I am away now!', 'gone'), 'title' => 'Away', 'link' => 'http://myawaylink.com'),
    'hi' => array('description' => 'how are you?', 'title' => 'Hello', 'link' => 'http://mylink.com'),
    'back' => array('description' => array('I am back now!', 'back', 'present'), 'title' => 'Here', 'link' => 'http://mybacklink.com'),
    'bye' => array('description' => array('Goodbye!', 'see ya'), 'title' => 'See Ya Later', 'link' => 'http://mybyelink.com'),
);

Заголовки в порядке ABC здесь: прочь, привет, здесь и увидимся позже.

Как я могу это сделать и при этом сохранить массив без изменений со всеми вложенными массивами в нем?

Спасибо, ребята:)

1 Ответ

1 голос
/ 31 августа 2011

Вы хотите использовать функцию uasort с пользовательской функцией сортировки, используя функцию strnatcmp.Вот пример для вашего кода:

function titleSort($a, $b) {
    return strnatcmp($a['title'], $b['title']);
}

uasort($my_array, 'titleSort');

При желании вы можете добавить некоторую проверку работоспособности входных переменных, чтобы убедиться, что они являются массивами, используя is_array.

...