2017-06-02 79 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