搜索和替换数组中的数组

时间:2013-06-19 09:00:04

标签: php arrays

我的头衔有点令人困惑。我会尝试更好地解释我想做什么。 我有一个包含其他数组的数组:

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

3 个答案:

答案 0 :(得分:2)

尝试,

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

答案 1 :(得分: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;
    }
}

答案 2 :(得分:0)

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