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'。我的问题是当我找到正确的数组元素时,如何更改其状态键的值。并将其放回mapBoard中。

4

3 回答 3

2

尝试,

foreach($this->mapBoard as $key => $block)
{
    if($block['x'] == $x && $block['y'] == $y)
    {
        $this->mapBoard[$key]['status'] = true;
        return $block;
    }
    else
    {
        continue;
    }
}
于 2013-06-19T09:03:09.187 回答
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;
    }
}
于 2013-06-19T09:06:51.197 回答
0

您可以返回数组键代替$block['status'] = true;,然后根据数组键更新状态。

于 2013-06-19T09:09:56.337 回答