Как я перемещаю элемент массива с известным ключом до конца массива в PHP?

Наличие мозга замерзает довольно тривиальная проблема. Если я запускаю с массива как это:

$my_array = array(
                  'monkey'  => array(...),
                  'giraffe' => array(...),
                  'lion'    => array(...)
);

... и новые элементы могли бы быть добавлены с различными ключами, но всегда значением массива. Теперь я могу быть уверен, что первый элемент всегда будет иметь ключевую 'обезьяну', но я не могу быть уверен ни в одном из других ключей.

Когда я закончил заполнять массив, я хочу переместить известный элемент 'обезьяна' до конца массива, не нарушая порядок других элементов. Что самый эффективный путь состоит в том, чтобы сделать это?

Каждым путем я могу думать, кажется немного неуклюжим, и я чувствую, что пропускаю что-то очевидное.

48
задан tamewhale 1 March 2010 в 12:42
поделиться

2 ответа

Единственный способ, который я могу придумать, это удалить его, а затем добавить:

$v = $my_array['monkey'];
unset($my_array['monkey']);
$my_array['monkey'] = $v;
89
ответ дан 7 November 2019 в 12:24
поделиться

array_shift , вероятно, менее эффективно, чем сброс индекса , но он работает:

$my_array = array('monkey' => 1, 'giraffe' => 2, 'lion' => 3);
$my_array['monkey'] = array_shift($my_array);
print_r($my_array);

Другой альтернативой является обратный вызов и uksort :

uksort($my_array, create_function('$x,$y','return ($y === "monkey") ? -1 : 1;'));

Вы захотите использовать правильную лямбда , если вы используете PHP5.3 +, или просто регулярно определяете функцию как глобальную функцию.

8
ответ дан 7 November 2019 в 12:24
поделиться