2010-10-24 62 views
3

我正在嘗試構建一個遊戲板8x8的遊戲棋子的小遊戲(有點像跳棋) 所以我可以移動與MySQL的棋子球員可以自由移動董事會要對付對方的戰列艦。使用array_replace與多維數組的PHP

件會發生在預定的空間,而其他空間將是空的,是由MySQL處理

$pieces = array(
      //battleship 1 player 1 
      "b1" => '<img src="images/b1.jpg" width="100" height="100" alt="b1">', 
      //battleship 2 player2 
      "b2" => '<img src="images/b1.jpg" width="100" height="100" alt="b1">', 
     ); 
       // 'es' represents empty squares 
$board = array(
     array('b1','es','b1','es','b1','es','b1','es'), 
     array('es','b1','es','b1','es','b1','es','b1'), 
     array('b1','es','b1','es','b1','es','b1','es'), 
     array('es','es','es','es','es','es','es','es'), 
     array('es','es','es','es','es','es','es','es'), 
     array('es','es','es','es','es','es','es','es'), 
     array('b2','es','b2','es','b2','es','b2','es'), 
     array('es','b2','es','b2','es','b2','es','b2'), 
     array('b2','es','b2','es','b2','es','b2','es') 
    ); 

我已經有一個循環顯示板要問什麼,我是怎麼做的,我把該($ piece - > $ board)我知道你可以使用array_replace將元素和數組放入另一個數組中,但我不知道如何使用多維數組。

我也試圖使用mysql針對移動的板

+0

'array_replace'不會幫助你在這裏,它的工作原理不同於你的想法。最好是'array_map',但是如果使用PHP <5.3,則很難將'$ pieces'數組傳遞給回調。 – 2010-10-24 07:58:36

回答

6

裏面如果使用PHP> = 5.3,則可以使用array_map

$callback = function($value) use ($pieces) { 
    if(array_key_exists($value, $pieces)) { 
     return $pieces[$value]; 
    } 
    return $value; 
} 

foreach($board as &$row) { 
    $row = array_map($row, $callback); 
} 

如果你使用PHP < 5.3,你可以使用array_walk_recursive

function map(&$value, $key, $map) { 
    if(array_key_exists($value, $map)) { 
     $value = $map[$value]; 
    } 
} 

array_walk_recursive($board, 'map', $pieces); 

不是PHP 5.3版本會在這兩種情況下更短;)

更新:

DEMO HERE :)

+0

@Felix Kling所有我都要把它放到php中,這就是它 – hgbso 2010-10-24 08:04:15

+0

@hgbso:不知道我是否理解你的問題,但'$ board'和'$ pieces'是你的例子中的兩個數組。你必須將它們傳遞給'array_walk_recursive'。 – 2010-10-24 08:06:43

+0

@hgbso:你可以在這裏找到一個演示:http://codepad.org/ekmS46nz(確保你使用正確的圖像鏈接'b2';)) – 2010-10-24 08:09:53