我的函数不修改数组

时间:2013-06-20 23:06:06

标签: php arrays function indexing

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

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表明数组未被修改。看起来该功能可以正常工作,但它不会修改数组。也许我应该在某处使用 &

2 个答案:

答案 0 :(得分:3)

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

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

以下是使用&amp ;: http://php.net/manual/en/language.references.pass.php

传递引用的链接

答案 1 :(得分:1)

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

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);