首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果下一个条目是整数,则在数组中应用Php函数(连接一个有效的FEN字符串)

如果下一个条目是整数,则在数组中应用Php函数(连接一个有效的FEN字符串)
EN

Stack Overflow用户
提问于 2019-10-09 02:40:50
回答 1查看 146关注 0票数 0

试图构建一个有效的分弦

给定这个8*8数组示例,表示棋盘,("1“是空方块):

代码语言:javascript
复制
$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"]]

在原地,这是一种立场:

我正在寻找的有效结果是:

代码语言:javascript
复制
rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR

到现在为止,我的产出是:

代码语言:javascript
复制
rnbqkbnr/pppppppp/11111111/11111111/1111P111/11111111/PPPP1PPP/RNBQKBNR

显然,数组中的任何整数条目都应该与下一个整数相加,只有当下一个条目是整数时,如果是的话,那么下一个条目应该被丢弃,直到结束。

通过迭代数组,我不知道如何简单地应用像步行()地图()这样的东西。也许一个简单的字符串操作就足够了?

代码语言:javascript
复制
  $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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-09 03:41:34

代码语言:javascript
复制
$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"]];

$parts =  array();
foreach ($checkerboard as $innerArray) {
    $num = null;
    $str = '';
    foreach($innerArray as $innerval){
        if(is_numeric($innerval)){
            $num += (int) $innerval;
        }
        else{
            if(!is_null($num)){
                $str .=$num;
                $num = null;
            }
            $str .=$innerval;
        }
    }
    if(!is_null($num)){
        $str .=$num;
    }
    array_push($parts,$str);
}
$result = implode('/',$parts);

上面的代码将生成所需的输出并将其存储在$result上。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58296328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档