XML 节点和子节点值到数组 PHP
XML node and childnode values to array PHP
我正在尝试将节点值保存到数组中。这是 XML 结构:
<wildcards>
<conference id="1">
<seeds>
<seed divId="1">10,7,17</seed>
<seed divId="2">8,5,3</seed>
</seeds>
<wild>2,4</wild>
<elimination>11,6,14,1,13,12,20,15</elimination>
</conference>
</wildcards>
The xml file can be found here
我想将会议 1 的节点值与数组键相关联,即它们在通配符排名中的位置。这是我的代码:
$xmlDoc = new DOMDocument();
$xmlDoc->load('http://www.tsn.ca/datafiles/XML/NHL/standings.xml');
$searchNode = $xmlDoc->getElementsByTagName('wildcards');
foreach ($searchNode as $node) {
$conference1 = $node->getElementsByTagName('conference');
$conference1 = $conference1->item(0)->nodeValue;
}
echo $conference1;
// $conference1 = str_replace(" ",",",$conference1);
$conference1Array = explode(',', $conference1);
$conference1ArrayLength = count($conference1Array) ;
for ($i = 1; $i < $conference1ArrayLength; $i++) {
echo $i.": ".$conference1Array[$i-1];
echo "<br/>";
}
If you go to this website,你可以看到我现在的输出。我试图用字符串替换空格并在 ',' 上爆炸以使数组正确,但它没有用。
会议 1 的输出是:10,7,17 8,5,3 2,4 11,6,14,1,13,12,20,15
。即使有空格,替换也不起作用。
我需要在 17、3 和 4 之后有一个逗号。我的想法是将团队 ID 的键插入到我的数据库中名为 seed
的列中。然后我可以使用 PHP 来确定哪些数字与 table 输出的每个分区/通配符相关联。这是我所说的键和团队 ID / 节点值的关联的意思:
团队 ID:10 -> 1(第 1 分区第一)
团队编号:7 -> 2(第 1 分区第二)
团队编号:17 -> 3(第 1 分区第三)
团队编号:8 -> 4(第 2 分区第 1)
团队 ID:5 -> 5(第 2 分区第 2)
团队 ID:3 -> 6(第 3 分区第 3)
团队 ID:2 -> 7(通配符 1)
团队 ID:4 -> 8(通配符 2)
Team Id:其余全部(淘汰)
我尝试使用 code from this link 单独获取节点值,但我不知道如何让它适合我的情况。顺便说一下,我已经没有我尝试过的代码了。
编辑:我查看了提供的链接并得出以下结论:
$searchNode = $xmlDoc->getElementsByTagName('wildcards');
$divData = array();
foreach($searchNode as $node){
foreach($node->childNodes as $child) {
foreach($child->childNodes as $secondChild) {
foreach($secondChild->childNodes as $thirdChild) {
$divData[] = array($thirdChild->nodeName => $thirdChild->nodeValue);
}
}
}
}
The output of conference1 is: 10,7,17 8,5,3 2,4 11,6,14,1,13,12,20,15. Even though there is whitespace the replace did not work.
大功告成,使用以下代码插入逗号:
$conference1 = '10,7,17 8,5,3 2,4 11,6,14,1,13,12,20,15 ';
$conference1 = str_replace(" ",",",trim($conference1));
更新 1
试试这个来替换任何不是逗号或 [0-9]
的字符
$new_string = preg_replace('/[^0-9,]+/u', ",", $your_string);
更新 2
要修复开头和结尾的多余逗号,请再执行一次 trim $new_string = trim($your_string,",");
我正在尝试将节点值保存到数组中。这是 XML 结构:
<wildcards>
<conference id="1">
<seeds>
<seed divId="1">10,7,17</seed>
<seed divId="2">8,5,3</seed>
</seeds>
<wild>2,4</wild>
<elimination>11,6,14,1,13,12,20,15</elimination>
</conference>
</wildcards>
The xml file can be found here
我想将会议 1 的节点值与数组键相关联,即它们在通配符排名中的位置。这是我的代码:
$xmlDoc = new DOMDocument();
$xmlDoc->load('http://www.tsn.ca/datafiles/XML/NHL/standings.xml');
$searchNode = $xmlDoc->getElementsByTagName('wildcards');
foreach ($searchNode as $node) {
$conference1 = $node->getElementsByTagName('conference');
$conference1 = $conference1->item(0)->nodeValue;
}
echo $conference1;
// $conference1 = str_replace(" ",",",$conference1);
$conference1Array = explode(',', $conference1);
$conference1ArrayLength = count($conference1Array) ;
for ($i = 1; $i < $conference1ArrayLength; $i++) {
echo $i.": ".$conference1Array[$i-1];
echo "<br/>";
}
If you go to this website,你可以看到我现在的输出。我试图用字符串替换空格并在 ',' 上爆炸以使数组正确,但它没有用。
会议 1 的输出是:10,7,17 8,5,3 2,4 11,6,14,1,13,12,20,15
。即使有空格,替换也不起作用。
我需要在 17、3 和 4 之后有一个逗号。我的想法是将团队 ID 的键插入到我的数据库中名为 seed
的列中。然后我可以使用 PHP 来确定哪些数字与 table 输出的每个分区/通配符相关联。这是我所说的键和团队 ID / 节点值的关联的意思:
团队 ID:10 -> 1(第 1 分区第一)
团队编号:7 -> 2(第 1 分区第二)
团队编号:17 -> 3(第 1 分区第三)
团队编号:8 -> 4(第 2 分区第 1)
团队 ID:5 -> 5(第 2 分区第 2)
团队 ID:3 -> 6(第 3 分区第 3)
团队 ID:2 -> 7(通配符 1)
团队 ID:4 -> 8(通配符 2)
Team Id:其余全部(淘汰)
我尝试使用 code from this link 单独获取节点值,但我不知道如何让它适合我的情况。顺便说一下,我已经没有我尝试过的代码了。
编辑:我查看了提供的链接并得出以下结论:
$searchNode = $xmlDoc->getElementsByTagName('wildcards');
$divData = array();
foreach($searchNode as $node){
foreach($node->childNodes as $child) {
foreach($child->childNodes as $secondChild) {
foreach($secondChild->childNodes as $thirdChild) {
$divData[] = array($thirdChild->nodeName => $thirdChild->nodeValue);
}
}
}
}
The output of conference1 is: 10,7,17 8,5,3 2,4 11,6,14,1,13,12,20,15. Even though there is whitespace the replace did not work.
大功告成,使用以下代码插入逗号:
$conference1 = '10,7,17 8,5,3 2,4 11,6,14,1,13,12,20,15 ';
$conference1 = str_replace(" ",",",trim($conference1));
更新 1
试试这个来替换任何不是逗号或 [0-9]
$new_string = preg_replace('/[^0-9,]+/u', ",", $your_string);
更新 2
要修复开头和结尾的多余逗号,请再执行一次 trim $new_string = trim($your_string,",");