можно ли легко «повернуть» массив в PHP?
Например: 1, 2, 3, 4 -> 2, 3, 4, 1
Есть ли какая-то встроенная функция PHP для этого?
Большинство текущих ответов верны, но только если вы не заботитесь о своих показателях:
$arr = array('foo' => 'bar', 'baz' => 'qux', 'wibble' => 'wobble'); array_push($arr, array_shift($arr)); print_r($arr);
Вывод:
Array ( [baz] => qux [wibble] => wobble [0] => bar )
Чтобы сохранить ваши показатели, вы можете сделать что-то вроде:
$arr = array('foo' => 'bar', 'baz' => 'qux', 'wibble' => 'wobble'); $keys = array_keys($arr); $val = $arr[$keys[0]]; unset($arr[$keys[0]]); $arr[$keys[0]] = $val; print_r($arr);
с$arr = array('foo' => 'bar', 'baz' => 'qux', 'wibble' => 'wobble'); $keys = array_keys($arr); $val = $arr[$keys[0]]; unset($arr[$keys[0]]); $arr[$keys[0]] = $val; print_r($arr);
Вывод:
Array ( [baz] => qux [wibble] => wobble [foo] => bar )
Возможно, кто-то может сделать поворот более лаконично, чем мой четырехстрочный метод, но это все равно работает.
$numbers = array(1,2,3,4); array_push($numbers, array_shift($numbers)); print_r($numbers);
Вывод
Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 1 )
Используйте array_shift
и array_push
.
Это очень просто и может быть сделано разными способами. Пример:
$array = array( 'a', 'b', 'c' ); $array[] = array_shift( $array );
Используйте array_shift
и array_push
Логика заключается в замене элементов. Алгоритм может выглядеть так:
for i = 0 to arrayLength - 1 swap( array[i], array[i+1] ) // Now array[i] has array[i+1] value and // array[i+1] has array[i] value.
Нет. Проверьте документацию на array_shift
и связанные с ней функции для некоторых инструментов, которые вы можете использовать для записи. В комментариях к этой странице может быть array_rotate
функция array_rotate
.
Также стоит прочитать функции массива, перечисленные на левой боковой панели, чтобы получить полное представление о том, какие функции массива доступны в PHP.
Метод поддержания ключей и поворота. используя ту же концепцию, что и array_push (array, array_shift (array)), вместо этого мы будем использовать array_merge из 2 array_slices
$x = array("a" => 1, "b" => 2, "c" => 3, 'd' => 4);
Чтобы переместить первый элемент в конец
array_merge(array_slice($x, 1, NULL, true), array_slice($x, 0, 1, true) //'b'=>2, 'c'=>3, 'd'=>4, 'a'=>1
Чтобы переместить последний элемент на передний
array_merge(array_slice($x, count($x) -1, 1, true), array_slice($x, 0, //'d'=>4, 'a'=>1, 'b'=>2, 'c'=>3
$daynamesArray = array("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"); array_push($daynamesArray, array_shift($daynamesArray)); //shift by one array_push($daynamesArray, array_shift($daynamesArray)); //shift by two print_r($daynamesArray);
Выход начинается с «среды»:
Array ( [0] => Wednesday [1] => Thursday [2] => Friday [3] => Saturday [4] => Sunday [5] => Monday [6] => Tuesday
Используйте встроенную функцию array_reverse
. Это самый быстрый способ «повернуть» массив в php.
вы можете использовать эту функцию:
function arr_rotate(&$array,$rotate_count) { for ($i = 0; $i < $rotate_count; $i++) { array_push($array, array_shift($array)); } }
Применение:
$xarr = array('1','2','3','4','5'); arr_rotate($xarr, 2); print_r($xarr);
результат:
Array ( [0] => 3 [1] => 4 [2] => 5 [3] => 1 [4] => 2 )