Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ajax&;将文本文件转换为2d javascript数组;php_Javascript_Php_Jquery_Ajax - Fatal编程技术网

使用ajax&;将文本文件转换为2d javascript数组;php

使用ajax&;将文本文件转换为2d javascript数组;php,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,因此,我正在使用Javascript构建一个基于浏览器的rpg。最初,我的关卡只有一个图层,是从javascript 2d地图数组加载的。但是,我正在修改代码,以支持从文件加载的多个层 我可以检索文件数据而不会遇到太多问题,但是,我不知道如何将信息解析为可用数组 我的文本文件的内容如下: LAYER 0, 0, 0, 0, 0 0, 0, 0, 0, 0 0, 0, 0, 0, 0 0, 0, 0, 0, 0 0, 0, 0, 0, 0 LAYER 0, 0, 0, 0, 0 0, 0, 0,

因此,我正在使用Javascript构建一个基于浏览器的rpg。最初,我的关卡只有一个图层,是从javascript 2d地图数组加载的。但是,我正在修改代码,以支持从文件加载的多个层

我可以检索文件数据而不会遇到太多问题,但是,我不知道如何将信息解析为可用数组

我的文本文件的内容如下:

LAYER
0, 0, 0, 0, 0
0, 0, 0, 0, 0
0, 0, 0, 0, 0
0, 0, 0, 0, 0
0, 0, 0, 0, 0
LAYER
0, 0, 0, 0, 0
0, 0, 0, 0, 0
0, 0, 0, 0, 0
0, 0, 0, 0, 0
0, 0, 0, 0, 0
我的Ajax和PHP用于检索级别

// JAVASCRIPT
    $.ajax({
            type: 'POST',
            url: 'lib/ajax.php',
            data: {method: 'getLevel'},
            success: function(data){

            },
            error: function(x, h, r){
                console.log(x, h, r);
            }
        })

// PHP FILE 2

public function getLevel(){
   $file = file_get_contents('../levels/level1.txt');
   echo $file;
}
有一个中间文件处理所有ajax请求,将它们传递给functions类

我可以很好地获得我的级别数据,但一旦我有了它,我就不知道该怎么办了


我知道我可以通过在每个组的末尾添加换行符并以这种方式解析它们来实现这一点。然而,在将来实现平铺编辑器时,这将成为一场噩梦。你们有什么建议吗?如果您的数据遵循此布局,您会建议在php或javascript级别进行解析,还是两者都进行解析?

LAYER
0, 0, 0, 0, 0
0, 0, 0, 0, 0
0, 0, 0, 0, 0
0, 0, 0, 0, 0
0, 0, 0, 0, 0
LAYER2
0, 0, 0, 0, 0
0, 0, 0, 0, 0
0, 0, 0, 0, 0
0, 0, 0, 0, 0
0, 0, 0, 0, 0
你可以这样做

function parseLayer($text){
    $layers = array();
    $lines = explode("\n", $text);
    $lastLayer;

    $currArray = array();

    foreach($lines as $line){
        if(strpos($line, ",") === false){
            if(!empty($lastLayer)){
                $layers[$lastLayer] = $currArray;
                $currArray = array();
            }
            $lastLayer = trim($line);
        }else{
            $nodes = explode(",", $line);
            $nodeList = array();
            foreach($nodes as $node){
                $nodeList[] = trim($node);
            }
            $currArray[] = $nodeList;
        }
        $layers[$lastLayer] = $currArray;
    }
    return $layers;
}
然后,要将其传递给Javascript,可以使用JSON for php

因为@Mike在他的手机上,下面是您的代码:

{"LAYER":[
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0]
],
"LAYER2":[
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0]
]
}

您可以使用json存储数据吗?这会让你的生活轻松很多。当然,在这一点上我愿意使用任何东西。它是否仍然在转换上面的映射的可能性范围内,也就是说,我可以使用json引用一个2d数组,比如map[x][y]?是的,最好的部分是json已经是一个JavaScript对象,所以您没有任何进一步的工作要做。您可以在Ajax回调中使用data.layer1[2][4]访问点。当我在电脑前(我的手机太硬了),我会发布你输入文件的json版本。谢谢你的快速回复!我以后一定会投票给你的!我已经更新了@Mike's Surpstion的答案,因此如果您使用该选项,您可以在JSON中看到它。等待Mike发布他的答案并将其标记为正确。我刚刚添加了他的JSON实现,因此您可以看到它。这是一个很好的答案,谢谢!(向上投票)-在接受之前,我会看看@mike的解决方案结果如何。很抱歉,我有一个bug,我已经为您修复了它给您$layers[“layer_name”][x][y]底部是我建议的确切结构,仅以该格式存储数据以减少处理开销。谢谢各位@迈克,我已经对你的评论投了更高的票,以抵消接受的影响。