如何使用递归用户定义函数模拟 array_reverse()?

use*_*761 4 php arrays recursion reverse slice

我想使用递归反转索引数组中的值。输出应与array_reverse()相同。

我的代码:

$array = [1,2,3,4,5,6,7];

function reverseString(&$s) {
    if(count($s) < 2){
        return;
    }
    $len = count($s);
    $temp = $s[0];
    $s[0] = $s[$len - 1];
    $s[$len - 1] = $temp;
    reverseString(array_slice($s, 1, $len - 2));
}

reverseString($array);
print_r($array);
Run Code Online (Sandbox Code Playgroud)

返回:

Array (
    [0] => 7
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 1 )
Run Code Online (Sandbox Code Playgroud)

array_slice()是数组部分的链接,对吗?

为什么内部元素没有受到我的递归交换技术的影响?

ark*_*cha 5

字符串和数组是两个不同的东西。我稍微澄清了你的算法:

<?php
$array = [1,2,3,4,5,6,7];

function reverseSequence(&$s) {
    $len = count($s);
    if($len < 2){
        return;
    }

    $rest = array_slice($s, 1, $len - 2);
    reverseSequence($rest);
    $s = array_merge([$s[$len - 1]], $rest, [$s[0]]);
}

reverseSequence($array);
print_r($array);
Run Code Online (Sandbox Code Playgroud)

?输出显然是:

Array
(
    [0] => 7
    [1] => 6
    [2] => 5
    [3] => 4
    [4] => 3
    [5] => 2
    [6] => 1
)
Run Code Online (Sandbox Code Playgroud)