Переместить значение в массиве PHP в начало массива

У меня есть PHP-массив, похожий на этот:

0 => "red", 1 => "green", 2 => "blue", 3 => "yellow" 

Я хочу переместить желтый в индекс 0. Как мне это сделать?

Изменить: Мой вопрос: как перенести любой из этих элементов в начало? Как бы я переместил зеленый в индекс 0 или синий в индекс 0? Этот вопрос связан не только с перемещением последнего элемента в начало.

Мне кажется, это самый простой способ. Вы можете перенести любую позицию в начало, а не только на последнюю (в этом примере она перемещается синим цветом в начало).

 $colours = array("red", "green", "blue", "yellow"); $movecolour = $colours[2]; unset($colours[2]); array_unshift($colours, $movecolour); не $colours = array("red", "green", "blue", "yellow"); $movecolour = $colours[2]; unset($colours[2]); array_unshift($colours, $movecolour); 

Вероятно, самый простой способ

 array_unshift( $arr, array_pop( $arr ) ); 

РЕДАКТИРОВАТЬ

За ваш комментарий «как я могу взять любой один индекс из массива и перенести его в начало», мой ответ выше не полностью удовлетворяет этому запросу – он работает только путем перемещения последнего элемента в индекс 0.

Однако эта функция удовлетворяет этому запросу

 /** * Move array element by index. Only works with zero-based, * contiguously-indexed arrays * * @param array $array * @param integer $from Use NULL when you want to move the last element * @param integer $to New index for moved element. Use NULL to push * * @throws Exception * * @return array Newly re-ordered array */ function moveValueByIndex( array $array, $from=null, $to=null ) { if ( null === $from ) { $from = count( $array ) - 1; } if ( !isset( $array[$from] ) ) { throw new Exception( "Offset $from does not exist" ); } if ( array_keys( $array ) != range( 0, count( $array ) - 1 ) ) { throw new Exception( "Invalid array keys" ); } $value = $array[$from]; unset( $array[$from] ); if ( null === $to ) { array_push( $array, $value ); } else { $tail = array_splice( $array, $to ); array_push( $array, $value ); $array = array_merge( $array, $tail ); } return $array; } 

И, в использовании

 $arr = array( 'red', 'green', 'blue', 'yellow' ); echo implode( ',', $arr ); // red,green,blue,yellow // Move 'blue' to the beginning $arr = moveValueByIndex( $arr, 2, 0 ); echo implode( ',', $arr ); // blue,red,green,yellow 

Эта функция позволит вам перемещать элемент в произвольное положение в массиве, оставив остальную часть массива нетронутой:

 function array_reorder($array, $oldIndex, $newIndex) { array_splice( $array, $newIndex, count($array), array_merge( array_splice($array, $oldIndex, 1), array_slice($array, $newIndex, count($array)) ) ); return $array; } 

Надеемся, что использование довольно очевидно, так что:

 $array = array('red','green','blue','yellow',); var_dump( array_reorder($array, 3, 0), array_reorder($array, 0, 3), array_reorder($array, 1, 3), array_reorder($array, 2, 0) ); 

Выведет это:

 array(4) { [0]=> string(6) "yellow" [1]=> string(3) "red" [2]=> string(5) "green" [3]=> string(4) "blue" } array(4) { [0]=> string(5) "green" [1]=> string(4) "blue" [2]=> string(6) "yellow" [3]=> string(3) "red" } array(4) { [0]=> string(3) "red" [1]=> string(4) "blue" [2]=> string(6) "yellow" [3]=> string(5) "green" } array(4) { [0]=> string(4) "blue" [1]=> string(3) "red" [2]=> string(5) "green" [3]=> string(6) "yellow" } 

Вы хотите переместить один из элементов в начало. Допустим,

 $old = array( 'key1' =>'value1', 'key2' =>'value2', 'key3' =>'value3', 'key4' =>'value4'); 

И вы хотите переместить key3 в начало.

 $new = array(); $new['key3'] = $old['key3']; // This is the first item of array $new foreach($old as $key => $value) // This will continue adding $old values but key3 { if($key != 'key3')$new[$key]=$value; } 

РЕДАКТИРОВАНИЕ

Это обновление, основанное на вопросе и симпатизирующее родовым аспектам ответа Питера Бейли. Однако для меня слишком интенсивно работает функция / память, поэтому ниже просто выполняется своп значений $ from и $ to. Этот метод не приводит к изменению размера массива вообще, он просто меняет значения внутри него.

Второе редактирование: я добавил еще несколько аргументов, как указано в комментариях.

 function moveValueByIndex( array $array, $from=null, $to=null ) { // There is no array, or there are either none or a single entry if ( null === $array || count($array) < 2 ) { // Nothing to do, just return what we had return $array; } if ( null === $from ) { $from = count( $array ) - 1; } if ( null === $to ) { $to = 0; } if ( $to == $from ) { return $array; } if ( !array_key_exists($from, $array) ) { throw new Exception( "Key $from does not exist in supplied array." ); } $value = $array[$from]; $array[$from] = $array[$to]; $array[$to] = $value; return $array; } 

Простите меня, если бы я только что добавил это в комментарии к записи Питера. Это было слишком долго, чтобы включить все это там: /

Это очень похоже на ответ SharpC, но объясняет тот факт, что вы можете не знать, где значение находится в массиве (это ключ), или если оно даже установлено. Проверка «if» пропустит его, если цвет не установлен или если он уже является первым элементом в массиве.

 $color = 'yellow'; $color_array = array("red", "green", "blue", "yellow"); $key = array_search($color, $color_array); if ($key > 0) { unset($color_array[$key]); array_unshift($color_array, $color); } с $color = 'yellow'; $color_array = array("red", "green", "blue", "yellow"); $key = array_search($color, $color_array); if ($key > 0) { unset($color_array[$key]); array_unshift($color_array, $color); } 
 $array = array( 'red', 'green', 'blue', 'yellow', ); $last = array_pop($array); array_unshift($array, $last); 
 $a = array('red','green', 'blue','yellow'); $b = array_reverse( $a ); 

Если ваш вопрос заключается в том, как сделать последнее, станет первым.

Вы можете сделать так:

 $array = array("red", "green", "blue", "yellow"); $last = array_pop($array); array_unshift($array, $last); print_r($array); 

Результат:

 Array ( [0] => yellow [1] => red [2] => green [3] => blue ) 

Если вы не всегда планируете принести самый последний объект в начало массива, это будет самый простой способ сделать это …

 $array = array('red','green','blue','yellow'); unset($array[array_search($searchValue, $array)]); array_unshift($array, $searchValue); 

Если кто-то все еще ищет ответ, это альтернативный способ.

 $colors = array("red","green","blue","yellow"); $color_to_move = ["yellow"]; $colors_wo_yellow = array_diff($colors, $color_to_move);// This will give an array without "yellow" //Now add "yellow" as 1st element to $ array_unshift($colors_wo_yellow,$color_to_move[0]); 

Вот и все. 🙂

PHP: переместить любой элемент в первую или любую позицию:

 $sourceArray = array( 0 => "red", 1 => "green", 2 => "blue", 3 => "yellow" ); // set new order $orderArray = array( 3 => '', 1 => '', ); $result = array_replace($orderArray, $sourceArray); print_r($result);