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 に答える