1 回答

TA貢獻1796條經驗 獲得超4個贊
將索引加載到二維數組中,以便可以通過提供 y(上/下)和 x(左/右)來訪問每個元素
這就是我們的矩陣:
array(3) {
[0]=>
array(4) {
[0]=>
string(1) "0"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
[3]=>
string(1) "3"
}
[1]=>
array(4) {
[0]=>
string(1) "4"
[1]=>
string(1) "5"
[2]=>
string(1) "6"
[3]=>
string(1) "7"
}
[2]=>
array(2) {
[0]=>
string(1) "8"
[1]=>
string(1) "9"
}
}
所以我們的'0'是$matrix[0][0],1是$matrix[0,1],4是$matrix[1, 0]等等?,F在我們可以通過$y和$x訪問每個元素并得到通過添加 $y(向下加 1,向上加 -1)或 $x(向右加 1,向左加 -1)來將元素按所需方向移動。如果超出索引范圍,則意味著索引不存在(例如從 0 向左)。
<?php
$index = '0123456789';
$indexArray = str_split($index);
$matrix = array_chunk($indexArray, 4);
function move(array $matrix, string $current, string $direction) {
foreach ($matrix as $y => $row) {
foreach ($row as $x => $column) {
if ($column === $current) {
$position = [$y, $x];
}
}
}
if ($direction === 'up') {
$vector = [-1,0];
} elseif ($direction === 'down') {
$vector = [1,0];
} elseif ($direction === 'right') {
$vector = [0,1];
} elseif ($direction === 'left') {
$vector = [0,-1];
}
return $matrix[$position[0] + $vector[0]][$position[1] + $vector[1]] ?? null;
}
var_dump(move($matrix, '0', 'down')); // 4
var_dump(move($matrix, '0', 'up')); // null
var_dump(move($matrix, '0', 'left')); // null
var_dump(move($matrix, '0', 'right')); // 1
var_dump(move($matrix, '6', 'down')); // null
var_dump(move($matrix, '6', 'up')); // 2
var_dump(move($matrix, '6', 'left')); // 5
var_dump(move($matrix, '6', 'right')); // 7
- 1 回答
- 0 關注
- 115 瀏覽
添加回答
舉報