обратный первый элемент массива с последним - PullRequest
2 голосов
/ 25 января 2020

Я пытаюсь обратить первый элемент массива, указанный в параметре моей функции, с последним элементом.

Вот моя попытка:

$my_array = [0, 1, 2, 3, 4];


function  reverse_start_with_last(array &$arr)
{
    $arr[0] = end($arr);

    $last = end($arr);

    $last = reset($arr);

    print_r($arr);

    static $callingnumber = 0;
    $callingnumber++;

    echo '<br><br>' .     $callingnumber;
}

reverse_start_with_last($my_array);

выводит:

Массив ([0] => 4 [1] => 1 [2] => 2 [3] => 3 [4] => 4).

так что вы можете видеть, что ноль инвертируется с 4, а 4 не инвертируется с 0 .. Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 25 января 2020

Есть несколько способов сделать это, проблема в том, что ваш код перезаписывает начало перед тем, как сохранить и попытаться переместить его. Этот код принимает значение, затем перезаписывает его и затем обновляет последний элемент ...

function  reverse_start_with_last(array &$arr)
{
    $first = $arr[0];
    $arr[0] = end($arr);
    $arr[count($arr)-1] = $first;
    print_r($arr);
}

reverse_start_with_last($my_array);

Это предполагает числовой индексированный массив, а не любую другую форму индексации.

1 голос
/ 25 января 2020

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

function  array_change_first_last(array &$arr)
{
    $last = end($arr);
    $arr[key($arr)] = reset($arr);
    $arr[key($arr)] = $last;
}

$my_array = [0, 1, 2, 3, 4];
array_change_first_last($my_array);

Эта функция работает как с цифрами c, так и с ассоциативными массивами. Ключи остаются, обмениваются только значения.

$ass_array = ['a' => 0, 'b' => 1, 'c' => 2, 'd' => 3, 'z'=> 4];
array_change_first_last($ass_array);

Результат:

array(5) { ["a"]=> int(4) ["b"]=> int(1) ["c"]=> int(2) ["d"]=> int(3) ["z"]=> int(0) }
0 голосов
/ 26 января 2020

Вы можете сдвинуть первый элемент, вытолкнуть последний и сохранить их, а затем отменить сдвиг последнего и pu sh первый

$my_array = [0, 1, 2, 3, 4];

function  reverse_start_with_last(array &$arr)
{
    $first = array_shift($arr); // remove the first element and store it
    $last = array_pop($arr); // remove the last and store it
    array_unshift($arr, $last); // add the last at the beginning of the array
    array_push($arr, $first); // add the first at the end of the array
}


reverse_start_with_last($my_array);
print_r($my_array)
...