我的函数不修改数组


My function doesn't modify the array

我编写了一个函数,将数组值向左移动一个索引。它看起来像这样:

function index_shift($array, $index){
    $n = count($array) - 1;
    for($i = $n; $i >= $index; $i --){
        $array[$i + 1] = $array[$i];
    }
    print_r($array);
}
$array_one = array("a","b","c","d","e","f","g");
index_shift($array_one, 3);
echo "<br />";
print_r($array_one);

我将第一个print_r插入到函数中,看看它是否工作。它显示值已经向左移动了(d在第4和第5个索引上,所有的值都被移动了)。但是函数外的第二个print_r显示数组没有被修改。似乎函数工作,因为它必须,但它不修改数组。也许我应该在某个地方使用 & ?

您正在传递一个数组。如果要修改数组本身,则需要将引用传递给数组:

function index_shift(&$array, $index){
    $n = count($array) - 1;
    for($i = $n; $i >= $index; $i --){
        $array[$i + 1] = $array[$i];
    }
    print_r($array);
}

这里有一个关于使用&: http://php.net/manual/en/language.references.pass.php传递引用的链接

或者,您可以将数组值返回给函数调用:

function index_shift($array, $index){
    $n = count($array) - 1;
    for($i = $n; $i >= $index; $i --){
        $array[$i + 1] = $array[$i];
    }
    return $array;
}
$array_one = array("a","b","c","d","e","f","g");
$array_two=index_shift($array_one, 3);
echo "<br />";
print_r($array_one);
print_r($array_two);