Какой самый элегантный способ в PHP перемещать элемент массива, выбранный ключом, в первую позицию?
Входные данные:
$arr[0]=0; $arr[1]=1; $arr[2]=2; .... $arr[n]=n; $key=10;
Вывод:
$arr[0]=10; $arr[1]=0; $arr[2]=1; $arr[3]=2; .... $arr[n]=n;
Нет необходимости отключать ключи. Чтобы это было коротко, просто сделайте так, как следует
//appending $new in our array array_unshift($arr, $new); //now make it unique. $final = array_unique($arr);
демонстрация
Использовать array_unshift
:
$new_value = $arr[n]; unset($arr[n]); array_unshift($arr, $new_value);
с$new_value = $arr[n]; unset($arr[n]); array_unshift($arr, $new_value);
Старый вопрос, и уже ответил, но если у вас есть ассоциативный массив, вы можете использовать array_merge.
$arr = array_merge(array($key=>$arr[$key]), $arr);
Что-то вроде этого должно работать. Проверьте, существует ли массив, его значение, затем unset
его, затем используйте array_unshift
чтобы создать элемент снова и поместить его в начале.
if(in_array($key, $arr)) { $value = $arr[$key]; unset($arr[$key]); array_unshift($arr, $value); }
сif(in_array($key, $arr)) { $value = $arr[$key]; unset($arr[$key]); array_unshift($arr, $value); }
<?php $key = 10; $arr = array(0,1,2,3); array_unshift($arr,$key); var_dump($arr) //10,0,1,2,3 ?>
$arr[0]=0; $arr[1]=1; $arr[2]=2; $arr[3]=10; $tgt = 10; $key = array_search($tgt, $arr); unset($arr[$key]); array_unshift($arr, $tgt); // var_dump( $arr ); array 0 => int 10 1 => int 0 2 => int 1 3 => int 2
с$arr[0]=0; $arr[1]=1; $arr[2]=2; $arr[3]=10; $tgt = 10; $key = array_search($tgt, $arr); unset($arr[$key]); array_unshift($arr, $tgt); // var_dump( $arr ); array 0 => int 10 1 => int 0 2 => int 1 3 => int 2
Поскольку любой цифровой ключ будет переиндексирован с помощью array_unshift
(как указано в документе ), лучше использовать оператор объединения массива +
для перемещения элемента с определенным ключом в первой позиции массива:
$item = $arr[$key]; unset($arr[$key]); $arr = array($key => $item) + $arr;
с$item = $arr[$key]; unset($arr[$key]); $arr = array($key => $item) + $arr;
$tgt = 10; $key = array_search($tgt, $arr); for($i=0;$i<$key;$i++) { $temp = $arr[$i]; $arr[$i] = $tgt; $tgt = $temp; }
После этого простого кода все, что вам нужно сделать, это отобразить повторно настроенный массив. 🙂