Попытка построить действительную FEN-строку .
Учитывая этот пример массива 8 * 8, символизирующий игровую доску, ("1" - пустые квадраты):
$checkerboard = [["r","n","b","q","k","b","n","r"],["p","p","p","p","p","p","p","p"],["1","1","1","1","1","1","1","1"],["1","1","1","1","1","1","1","1"],["1","1","1","1","P","1","1","1"],["1","1","1","1","1","1","1","1"],["P","P","P","P","1","P","P","P"],["R","N","B","Q","K","B","N","R"]]
На месте это позиция:
![enter image description here](https://i.stack.imgur.com/AQ2tx.png)
Допустимый результат, который я ищу:
rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR
И к настоящему времени мой вывод:
rnbqkbnr/pppppppp/11111111/11111111/1111P111/11111111/PPPP1PPP/RNBQKBNR
Очевидно, что любая целочисленная запись в массиве должна быть суммой к следующей, только если следующая запись является целым числом, и если так, следующая запись должна быть отброшена до конца .
Итерируя массив, я не уверен, как применить что-то вроде array_walk () или array_map () здесь простым способом. Может быть, достаточно простой строковой операции?
$FEN = "";
for ($i = 0;$i < 8;$i++){
for ($j = 0;$j < 8;$j++){
if ($checkerboard[$i][$j] === "1"){
if ($checkerboard[$i][$j + 1] === "1"){
/* How to iterate till the end */
$FEN .= (int)$checkerboard[$i][$j] + (int)$checkerboard[$i][$j+1];
}
} else {
$FEN .= $checkerboard[$i][$j];
}
}
$FEN .= "/";
}
Есть идеи?
Пример онлайн: https://3v4l.org/tuqqo