Наличие мозга замерзает довольно тривиальная проблема. Если я запускаю с массива как это:
$my_array = array(
'monkey' => array(...),
'giraffe' => array(...),
'lion' => array(...)
);
... и новые элементы могли бы быть добавлены с различными ключами, но всегда значением массива. Теперь я могу быть уверен, что первый элемент всегда будет иметь ключевую 'обезьяну', но я не могу быть уверен ни в одном из других ключей.
Когда я закончил заполнять массив, я хочу переместить известный элемент 'обезьяна' до конца массива, не нарушая порядок других элементов. Что самый эффективный путь состоит в том, чтобы сделать это?
Каждым путем я могу думать, кажется немного неуклюжим, и я чувствую, что пропускаю что-то очевидное.
Единственный способ, который я могу придумать, это удалить его, а затем добавить:
$v = $my_array['monkey'];
unset($my_array['monkey']);
$my_array['monkey'] = $v;
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 +, или просто регулярно определяете функцию как глобальную функцию.