2011-07-06 34 views
11

我想有一個函數,它接受一個數組作爲輸入並更改數組的某些值(在我的情況下數組是$ _SESSION,但我認爲它並不真正)。如何在PHP中編寫修改數組的函數?

我該怎麼做?


ADDED

聽起來微不足道。但事實並非如此。我只是想爲數組設置某些值。例如,我想讓我的函數改變$ _SESSION ['x']和$ _SESSION ['y']。據我所知,如果我將一個數組作爲參數傳遞,那麼參數的任何更改都不會修改原始數組。例如:

function change_array($x) { 
    $x[0] = 100; 
} 
$x = array(1,2,3); 
change_array($x); 

它不會改變$ X。


加入2-

爲什麼我的問題是下投票?我認爲這個問題並不是那麼微不足道,儘管它很短。我也認爲我提供了所有相關的細節。據我瞭解(感謝一個答案)它是關於「通過參考」。而且,我想修改$ _SEESION數組使得它有點不同。

+0

請更具體一些。你計劃在陣列上執行什麼操作? – 2011-07-06 13:35:18

+0

你爲什麼要傳遞'$ _SESSION'作爲參數:O?!?它已經是全球性的! –

回答

21

你的意思,它的呼叫:Passing by Reference

它很簡單的像

function changearray(&$arr){ 
    $arr['x'] = 'y'; 
} 

您可以撥打此類似:

changearray($_SESSION); 
+0

我認爲這正是要求的。有人說$ _SESSION是一個「特殊」數組(因爲它是全局的)。這是否意味着我應該以不同的方式對待它(例如,我不應該通過引用來傳遞它,而且,我不需要將它作爲參數傳遞)? – Roman

+1

他們的權利其全球,你不需要通過它,但我想學習你如何通過參考傳遞在PHP –

+1

非常感謝!很酷的是,你可以從我很短的原始問題中得到我所需要的。謝謝。 – Roman

0

的編碼是這樣的: -

$_SESSION['index_1'] = 'value 1'; 
$_SESSION['index_2'] = 'value 2'; 

如果要更改值的指數「index_2」珍惜「value 2 changed」,那麼你只是簡單的寫: -

$_SESSION['index_2'] = 'value 2 changed'; 

希望它能幫助。

+0

正如我在原始文章中提到的,我想要一個函數,因爲生成新值所需的計算順序很大(所以,我想將所有內容都放入函數中)。 – Roman

-1
function change_array() { 

    global $x; /*this will tell the function to work on the array 'x' out of the function itself.*/ 
    $x[0] = 100; 

}