#php
#php
Вопрос:
У меня есть простой PHP-массив, который выглядит следующим образом…
Array
(
[0] => WP_Term Object
(
[id] => 455
)
[1] => WP_Term Object
(
[id] => 738
)
[2] => WP_Term Object
(
[id] => 88
)
[3] => WP_Term Object
(
[id] => 905
)
)
Я пытаюсь отсортировать этот массив, поместив id 88
его сверху, но оставив порядок одинаковым для всего остального. Итак, я заканчиваю…
Array
(
[0] => WP_Term Object
(
[id] => 88
)
[1] => WP_Term Object
(
[id] => 455
)
[2] => WP_Term Object
(
[id] => 738
)
[3] => WP_Term Object
(
[id] => 905
)
)
Я думал о том, чтобы сначала перебрать массив и удалить элемент, id 88
а затем повторно вставить его наверх.
Это правильный подход или есть более эффективный способ?
Комментарии:
1. Это нормально
sort
илиksort
нет? (просто обратите внимание, в первом массиве дважды0
указан ключ, один из них перезаписывается)2. php.net/manual/en/function.sort.php
3. Если важно упорядочить другие элементы, вы сможете использовать собственные
*sort
функции только в том случае, если вы используете PHP 8 — они нестабильны до этой версии. Есть еще несколько открытых вопросов о стабильной сортировке, но, по сути, это то, что вы ищете. Для более ранних версий, если все, что вам нужно сделать, это переместить один элемент наверх, то удаление и повторная вставка, вероятно, более понятны.4. Не думайте об этом как о сортировке; сначала найдите индекс элемента, который вы ищете, сохраните элемент, удалите его из массива, а затем снова снимите его с массива.
5. @fightstarr20 Я написал реализацию здесь: gist.github.com/matslindh/c5006d85e93a7f441331bb9dd35866a0 — замените сравнение на что-то, что вместо этого проверяет
id
объект.
Ответ №1:
Сначала то, что вы пытаетесь сделать, это не сортировка. Он просто находит элемент с указанным идентификатором, а затем помещает этот элемент в начало массива. Тогда как сортировка — это реорганизация данных в определенном порядке.
Ваш подход правильный, и я думаю, что нет более эффективного способа.