2013-06-20 39 views
0

我已经写了一个函数,将数组值向左移动一个索引。它看起来像这样:我的功能不修改阵列

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函数外面显示该数组未被修改。看起来像函数一样工作,但它不修改数组。也许我应该在某处使用&

+1

你似乎已经知道了问题和答案...... – elclanrs

+0

是啊,我是一个总的初学者我不知道在哪里使用那个该死的迹象。 – spb

回答

3

您正在传递一个数组。如果你想修改数组本身,你需要通过参考阵列:

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

+0

它的工作原理!我知道我必须在某个地方使用该标志,但不知道在哪里。只要系统允许我这样做,就会接受这个答案。非常非常感谢你! – spb

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