2013-06-20 43 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);