如果每个子数组中总是有3个元素。基本上如果这种模式继续下去 0,0,12:0,43,4:0,43,4:0,43,4 等等
0,0,12:0,43,4:0,43,4:0,43,4
$strCoordinatesMarker1 = "0,0,12:0,43,4"; print_r(array_chunk(preg_split('/,|:/', $strCoordinatesMarker1),3););
产量
Array ( [0] => Array ( [0] => 0 [1] => 0 [2] => 12 ) [1] => Array ( [0] => 0 [1] => 43 [2] => 4 ) )
砂箱
另一种方法,如果这些文件来自文件即可使用 fgetc 从文件中提取下一个字符。这里的优点是使用文件流时你的内存占用很小。权衡取舍可能有点慢或整体需要更长时间。
fgetc
您可以使用字符串,但必须创建一个临时文件,这可能会增加一些开销。该 php://temp 会将2x数据保存在内存中(如果我没记错的话),比如说 php://memory ,但与该流资源不同,它将开始卸载比临时文件大的数据。
php://temp
php://memory
//If you have a string you can use a temp file $f = fopen('php://temp', 'w+'); //open in write + read fwrite($f, "0,0,12:0,43,4"); //write the string to tmp rewind($f); //rewind the file to the start, reset the file pointer //if you have a file you can do this instead of the above //$f = fopen('yourfile.txt', 'r'); $result = []; $buffer = ''; $sub = []; while(!feof($f)){ $c = fgetc($f); if(':' == $c || false === $c){ if(!empty($buffer)){ $sub[] = $buffer; $buffer = ''; } if(!empty($sub)){ $result[] = $sub; $sub = []; } }elseif(',' == $c){ $sub[] = $buffer; $buffer = ''; }else{ $buffer .= $c; } } print_r($result);
Array( [0] => Array( [0] => 0 [1] => 0 [2] => 12 ) [1] => Array( [0] => 0 [1] => 43 [2] => 4 ) )
我应该补充说,这应该处理可变长度的部件,只要你有,它应该没问题 0-9 , : 和 , 在那里。如果你有其他的东西,那将在输出数组中结束 in the }else{ 。也就是说,添加另一个条件来处理它很容易。例如,我测试了这个字符串 0,0,12:0,43,4::0,2,6,454654,3 这给了我以下输出:
0-9
:
,
in the }else{
0,0,12:0,43,4::0,2,6,454654,3
Array( [0] => Array( [0] => 0 [1] => 0 [2] => 12 ) [1] => Array( [0] => 0 [1] => 43 [2] => 4 ) [2] => Array( [0] => 0 [1] => 2 [2] => 6 [3] => 454654 [4] => 3 ) )
遗憾的是,出于安全原因,我所知道的所有在线沙箱都不允许您使用文件功能。我确实在本地进行了测试。
在任何情况下,它都不是我能够真正基准的东西,这些只是我用于解析数据的其他方法的一些简单想法。
最终,你可能不得不将工作分成更小的块。
这也有点令人困惑:
我将给定标记的坐标作为字符串
这本身就没问题
并且文件输出所有标记和每个坐标数据的数组
什么文件?我没有看到你输出文件的任何地方,也许你的意思是输入文件,我怎么知道。
循环查询来自DB的标记
这个也是:
while ($stmt->fetch()) { $xyArray = explode(':', $strCoordinates); ... }
我相信你可能通过参考结果来约束这个,但问题并不清楚。我确实看到了评论,这是我知道来自数据库的唯一原因。添加它会更容易,更易读 mysqli_stmt::bind_result 或者你在那里使用什么。
mysqli_stmt::bind_result
无论如何我喜欢说这些只是一些想法。我只是提到上面的内容,因为它对数据来源产生了影响。它来自数据库,URL,文件等......你可以使用最后2个文件函数,而不是第一个文件函数。基本上对我而言,似乎这是来自数据库的数据,但它似乎也是很多数据,这使得在数据库中使用起来更加困难。
干杯。