2017-06-02 93 views
0

我懷疑這個問題的答案非常簡單,我爲自己的投票做了支持,但是,在閱讀this關於更改值,嘗試執行array_replace()並嘗試使用'passing by reference'我還沒有解決我的簡單問題。在php中替換數組的值

$levelState是經由array_push填充有一個字符串16項數組「鎖定」或「解鎖」,其可打印這樣的事情:

Array ([0] => unlocked [1] => unlocked [2] => locked [3] => locked [4] => locked [5] => locked [6] => locked [7] => locked [8] => locked [9] => locked [10] => locked [11] => unlocked [12] => unlocked [13] => unlocked [14] => unlocked [15] => unlocked) 

在某些情況下電平低於某一電平應該被解鎖。

//Function to unlock lower levels if, manually passed. 
function unlockLowerLevels($x) { 
    while($x > 0) { 
     $levelState[$x] = 'unlocked'; 
     echo $x; 
     $x--; 
    } 
} 
unlockLowerLevels($int); 

此函數不會對數組元素進行任何更改,但確實會回顯倒計時。我將不勝感激任何幫助。謝謝。

+2

側面說明,用'$ X> 0'它不會將你的數組的元素0。不知道這是你的想法或不是。 –

+0

乾杯不要驚慌。 0將永遠解鎖。 – Russell

回答

3

您需要將$levelState轉換爲函數,請參閱PHP: Variable Scope。因此,無論pass it by reference

function unlockLowerLevels(&$array, $x) { 
    while($x > 0) { 
     $array[$x] = 'unlocked'; 
     echo $x; 
     $x--; 
    } 
} 
unlockLowerLevels($levelState, $int); 

或者return新的數組:

function unlockLowerLevels($array, $x) { 
    while($x > 0) { 
     $array[$x] = 'unlocked'; 
     echo $x; 
     $x--; 
    } 
    return $array; 
} 
$levelState = unlockLowerLevels($levelState, $int); 
+0

2備註:首先它應該是$ x> = 0,因爲數組從0開始,所以有可能還可以解鎖levelState [0],其次是因爲所有較低級別都應該被忽略,所以可以包含一個if($ arrray = ='解鎖')休息;在你的循環中,所以你可以停在第一個解鎖水平 – Thomas

+1

首先,也許,OP沒有給予足夠的細節我會讓他們弄清楚。其次,我們如何知道「他們應該被解鎖」? – AbraCadaver