在PHP中将KML转换为数组

在PHP中将KML转换为数组,php,kml,Php,Kml,我在尝试使用PHP语言将*.kml文件转换为数组时遇到了问题。 kml文件> 代码 $dom = new \DOMDocument(); $dom->loadXml($file); $xpath = new \DOMXPath($dom); $xpath->registerNamespace('kml', 'http://www.opengis.net/kml/2.2'); $result = array(); $places = $

我在尝试使用
PHP
语言将
*.kml
文件转换为数组时遇到了问题。

kml文件>

代码

    $dom = new \DOMDocument();
    $dom->loadXml($file);
    $xpath = new \DOMXPath($dom);
    $xpath->registerNamespace('kml', 'http://www.opengis.net/kml/2.2');

    $result = array();
    $places = $xpath->evaluate('//kml:Placemark', NULL, FALSE);
    foreach ($places as $place) {
        $coord = $xpath->evaluate('string(kml:LineString/kml:coordinates)',$place, FALSE);
        $i = explode("\n", $coord);
        $result = array(
            'name' => $xpath->evaluate('string(kml:name)', $place, FALSE),
            'coords' => explode("\n", $coord, count($i)
            )
        );
    }

    var_dump($result);
问题是当我尝试使用
换行符
delimeter分解字符串时,结果总是这样

而我想要这样的结果

有人能帮我解决问题吗?谢谢大家!

有不同的新行字符,而不仅仅是
\r\n
-尝试使用类似于
preg\u split('/\r/',$string)的东西以捕获所有新行字符

有关
\R
作用的更详细解释,请查看SO答案。

'\R\n'
(在单引号之间)是:-文字反斜杠、字母R、文字反斜杠和字母n。这不是回车和换行。在单引号之间,不解释转义序列

另外:你确定换行序列是CRLF吗?它也可以仅为LF(很少仅为CR)

不管怎样,请尝试使用
“\r\n”
,如果无法使用
“\n”
(在双引号之间)


您可以修剪coords阵列:

<?php

function itemTrim(&$item) {
    $item = trim($item);
}

$r = "
     115.09031667,-8.81930500,64.500
     115.09031500,-8.81925667,64.400
     115.09033000,-8.81920167,64.300
     115.09038167,-8.81911333,64.100
     115.09042333,-8.81904000,64.000
     115.09048000,-8.81896833,63.900
     115.09053333,-8.81889167,63.800
     115.09056167,-8.81882333,63.800
     115.09059500,-8.81876667,63.800
     115.09063500,-8.81872500,63.900
     115.09067333,-8.81870167,63.800
    ";

$a = preg_split("/\r\n|\n|\r/", $r);
$b = array_walk($a, "itemTrim");

var_dump($a);

我已经更新了代码,结果出现了新问题。你可以在更新的网页上看到它question@Adi:你需要学习自己解决问题的基础知识,而不是问新问题。