2016-08-16 157 views
0

我試圖將節點值保存到數組中。這是XML結構:將XML節點和子節點值設置爲數組PHP

<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,你可以看到我的電流輸出。我嘗試將字符串替換爲空白,並在','上爆炸以獲得正確的數組,但它不起作用。

conference1的輸出爲:10,7,17 8,5,3 2,4 11,6,14,1,13,12,20,15。即使有空白,替換也不起作用。

我需要在17,3和4之後加逗號。這個想法是將團隊ID的密鑰插入我的數據庫中名爲seed的列中。然後,我可以使用PHP來確定哪些數字與表格輸出的每個分區/通配符關聯。這裏是我的意思是通過關鍵字和團隊ID /節點值的關聯:

團隊標識:10 - > 1(第一部分)
團隊標識:7 - > 2(第一分部)
團隊ID:17 - > 3(第三除法1)
團隊ID:8 - > 4(在分裂第一2)
團隊ID:5 - > 5(第2在第2部)
團隊ID: 3 - > 6(在分裂第三3)
團隊ID:2 - > 7(通配符1)
團隊ID:4 - > 8(通配符2)
團隊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); 
      } 
     } 
    } 
} 

This is my new output

回答

1

conference1的輸出是: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); 

UPDATE 2

要解決的開始和結束額外的逗號,另做修剪$new_string = trim($your_string,",");

+0

對不起,那是行不通的。我的帖子明確指出了這一點(我甚至將這行代碼註釋掉了)。我也用'trim'試過了。我猜測白色空間不被識別,因爲在諸如17和8之間的數字之間,節點發生了變化。 –

+0

用'trim'這是輸出'10,7,17​​ ,,,,,,,,,,,, 8,5,3 ,,,,,,,,, ,,,,,,,,, 2,4 ,,,,,,,,, 11,6,14,1,13,12,20,15' –

+0

嘗試正則表達式。查看我的更新回答 – Jason