不使用临时矩阵,利用原矩阵,为了不影响后续判断,使用-1表示细胞由活->死,使用2表示细胞由死->活
function gameOfLife(&$board) {
$_move = [0, -1, 1];
foreach ($board as $rowIndex => &$rowData) {
foreach ($rowData as $colIndex => &$cell) {
$_lifeCount = 0;
for ($i=0; $i<3; $i++) {
for ($j=0; $j<3; $j++) {
if ($i==0 && $j==0) {
continue;
}
$_newRow = $rowIndex + $_move[$i];
$_newCol = $colIndex + $_move[$j];
if ($_newRow >= 0 && $_newRow < count($board) && $_newCol >=0 && $_newCol < count($board[0]) && ($board[$_newRow][$_newCol] == 1 || $board[$_newRow][$_newCol] == -1)) {
$_lifeCount++;
}
}
}
if ($cell == 1 && ($_lifeCount < 2 || $_lifeCount > 3)) {
$cell = -1;
continue;
}
if ($cell == 0 && ($_lifeCount == 3)) {
$cell = 2;
}
}
}
foreach ($board as $rowIndex => &$rowData) {
foreach ($rowData as $colIndex => &$cell) {
if ($cell < 0) {
$cell = 0;
} else if ($cell > 1) {
$cell = 1;
}
}
}
}