asort PHP Array и оставьте одну запись сверху

У меня есть массив PHP

Я хочу отсортировать его по алфавиту и сохранить точную запись вверху:

$arr = array ("Orange", "Banana", "Strawberry", "Apple", "Pear");
asort($arr);

Теперь это будет выводить:

Apple, Banana, Orange, Pear, Strawberry

Я хочу, чтобы Orange оставил первую запись, а затем изменил порядок остальных:

Orange, Apple, Banana, Pear, Strawberry

Благодарю.

0

Решение

Получить первый элемент из массива, а затем вернуть его обратно:

$arr = array ("Orange", "Banana", "Strawberry", "Apple", "Pear");

$first = array_shift($arr);
asort($arr);
array_unshift($arr, $first);

Обновление с неизвестным orange позиция:

$arr = array ("Banana", "Orange", "Strawberry", "Apple", "Pear");
// $k is index of "Orange" in array
$k = array_search('Orange', $arr);
// store element with founded $k in a variable
$orange = $arr[$k];
// remove $k element from $arr
// same as `unset($arr[$k]);`
array_splice($arr, $k, 1);
// sort
asort($arr);
// add element in the beginning
array_unshift($arr, $orange);
1

Другие решения

Вы можете передать элемент, чтобы остаться наверху, используя пользовательскую функцию и uasort:

$keep = 'Orange';

uasort($arr, function ($lhs, $rhs) use ($keep) {
if ($lhs === $keep) return -1;
if ($rhs === $keep) return 1;

return $lhs <=> $rhs;
});

Не должно иметь значения, где находится Orange в массиве, он найдет путь вперед.

Редактировать: Примечание, <=> оператор требует PHP 7. Вы можете заменить с помощью вызова strcmp если вы используете 5

4