Я пытаюсь сохранить значения узлов в массиве. Это 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);
}
}
}
}
К сожалению, это не работает. В моем сообщении явно указано это (и я даже прокомментировал эту строку кода). Я попробовал это с 'trim'. Я предполагаю, что пробел не распознается, потому что между числами, такими как 17 и 8, происходит изменение в узлах. –
С 'trim' это выход' 10,7,17 ,,,,,,,,,,,, 8,5,3 ,,,,,,,,, ,,,,,,,,, 2,4 ,,,,,,,,, 11,6,14,1,13,12,20,15' –
Попробуйте регулярное выражение. См. Мой обновленный ответ – Jason