2016-08-16 6 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, вы можете увидеть мой текущий выход. Я попытался заменить строку пробелами и взорваться на ',', чтобы получить правильный массив, но это не сработало.

Выходной сигнал конференции1: 10,7,17 8,5,3 2,4 11,6,14,1,13,12,20,15. Несмотря на отсутствие пробелов, замена не сработала.

Мне нужно иметь запятую после 17, 3 и 4. Идея состоит в том, чтобы вставить ключ для идентификатора команды в столбец в моей базе данных с именем seed. Затем я могу использовать PHP для определения того, какие числа связаны с каждым делением/подстановочным знаком для вывода таблицы. Вот что я подразумеваю под ассоциацией ключа и значений id/node команды:

Идентификатор команды: 10 -> 1 (сначала в делении 1)
Идентификатор команды: 7 -> 2 (второй в делении 1)
ID команды: 17 -> 3 (третье место в дивизионе 1)
ID команды: 8 -> 4 (1-й в разделении 2)
ID команды: 5 -> 5 (2-й в разделении 2)
ID команды: 3 -> 6 (3-й в делении 3)
ID команды: 2 -> 7 (Джокер 1)
ID команды: 4 -> 8 (Джокер 2)
ID команды: все остальные (ликвидированы)

Я попытался получить значения узла отдельно, используя code from this link, но я не мог понять, как заставить его работать с моей ситуацией. Между прочим, у меня нет моего попытки кода.

Edit: я посмотрел на ссылки, представленные и придумали это:

$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

Выход конференции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)); 

UPDATE 1

Попробуйте заменить любые символы тх не запятая или [0-9]

$new_string = preg_replace('/[^0-9,]+/u', ",", $your_string); 

ОБНОВЛЕНИЕ 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

Смежные вопросы