因此,我正在使用 Javascript 为自己构建一个基于浏览器的 Angular 色扮演游戏。最初,我的关卡只有一个图层,并且是从 javascript 二维 map 数组加载的。但是,我正在更改我的代码以允许支持从文件加载多个图层。
我可以毫无问题地检索文件数据,但是,我不知道如何将信息解析为可用的数组。
我的文本文件内容如下;
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 请求,将它们传递给函数类。
我可以很好地获取我的关卡数据,我只是不知道一旦有了它该怎么办。
我知道我可以通过在每个组的末尾添加换行符并以这种方式解析它们来实现这一目标。然而,这将成为 future 实现 tile 编辑器时的噩梦。你们对如何解决这个问题有什么建议吗?您是否建议在 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 json_encode
因为@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]
]
}
关于javascript - 使用 ajax 和 php 将文本文件转换为 2d javascript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32845356/