2013-06-19 38 views
0

我的標題有點混亂。我會盡力解釋我想要做的事情。 我與其它陣列的陣列:搜索並替換數組中的數組

array (size=16) 
    0 => 
    array (size=4) 
     'value' => string 'apple.png' (length=9) 
     'x' => int 3 
     'y' => int 4 
     'status' => boolean false 
    1 => 
    array (size=4) 
     'value' => string 'apple.png' (length=9) 
     'x' => int 2 
     'y' => int 3 
     'status' => boolean false 
    2 => 
    array (size=4) 
     'value' => string 'cake.png' (length=8) 
     'x' => int 3 
     'y' => int 1 
     'status' => boolean false 

然後我有隱藏的輸入的一種形式:

'<input type="hidden" value="x:'.$i.';y:'.$j.'" name="coords"/>'; 

當表單提交我得到的值和提取的座標。然後我做一個循環。

foreach($this->mapBoard as $block) 
{ 
    if($block['x'] == $x && $block['y'] == $y) 
    { 
     $block['status'] = true; 
     return $block; 
    } 
    else 
    { 
     continue; 
    } 
} 

主要數組稱爲'地圖板'。我的問題是當我找到正確的數組元素時,如何更改它的狀態的值鍵。並把它放回mapBoard

+2

我不太清楚PHP中的指針,但'foreach($ this-> mapBoard as&$ block)'應該可以工作 – Imperative

+0

@Imperative在foreach中使用引用總是一個壞主意,因爲它可能會導致通過覆蓋它丟失列表中最後一項中的數據。 – Kalyan02

+0

@Kalyan你能告訴我們一些例子嗎?在[PHP手冊](http://php.net/manual/en/control-structures.foreach.php)中也提出了使用該引用的方法:「爲了能夠直接修改循環內的數組元素在$ value之前與&。在這種情況下,值將通過引用分配。「 – Stano

回答

2

嘗試,

foreach($this->mapBoard as $key => $block) 
{ 
    if($block['x'] == $x && $block['y'] == $y) 
    { 
     $this->mapBoard[$key]['status'] = true; 
     return $block; 
    } 
    else 
    { 
     continue; 
    } 
} 
2

PHP的的foreach默認使得它是迭代的數組的副本,所以我們必須手工的東西回數據修改時英寸

下面是一個簡單的調整你的代碼做

// For arrays foreach will give us the loop iteration in `i` while using $i => $block 
foreach($this->mapBoard as $i=>$block) 
{ 
    if($block['x'] == $x && $block['y'] == $y) 
    { 
     $block['status'] = true; 
     // we know i is the position, so stuff it back in 
     $this->mapBoard[$i] = $block; 
     return $block; 
    } 
    else 
    { 
     continue; 
    } 
} 
0

可以代替$block['status'] = true;返回數組鍵,之後您可以根據陣列關鍵更新狀態。