0

我正在尝试将节点值保存到数组中。这是 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>

xml 文件可以在这里找到
我想将会议 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/>";
}  

如果你去这个网站,你可以看到我当前的输出。我试图用字符串替换空格并在','上爆炸以使数组正确,但它不起作用。

会议 1 的输出是:10,7,17 8,5,3 2,4 11,6,14,1,13,12,20,15。即使有空格,替换也不起作用。

我需要在 17、3 和 4 之后加一个逗号。这个想法是将团队 ID 的键插入到我的数据库中名为seed. 然后我可以使用 PHP 来确定哪些数字与表格输出的每个除法/通配符相关联。这就是我所说的键和团队 id/节点值的关联:

团队 ID:10 -> 1(第 1 分区)
团队 ID:7 -> 2(第 1 分区)
团队 ID:17 - > 3(第 1 组第三)
团队 ID:8 -> 4(第 2 组)
团队 ID:5 -> 5(第 2 组)
团队 ID:3 -> 6(第 3 组)
团队 ID: 2 -> 7(通配符 1)
团队 ID:4 -> 8(通配符 2)
团队 ID:其余所有(淘汰)

我尝试使用此链接中的代码分别获取节点值,但我无法弄清楚如何让它适应我的情况。顺便说一句,我不再有我尝试过的代码了。

编辑:我查看了提供的链接并提出了这个:

$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);
            }
        }
    }
}

这是我的新输出

4

1 回答 1

1

会议1的输出为:10,7,17​​ 8,5,3 2,4 11,6,14,1,13,12,20,15。即使有空格,替换也不起作用。

您快到了,使用以下代码插入逗号:

$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

要在开始和结束处修复额外的逗号,请再次修剪$new_string = trim($your_string,",");

于 2016-08-16T05:51:45.460 回答