|
|
|
| После запроса к xml-базе, я получаю в ответ что-то, в виде:
Array
(
[tag] => CATEGORIES
[type] => open
[level] => 1
[attributes] => Array
(
[COUNT] => 9
)
)
Array
(
[tag] => CATEGORY
[type] => open
[level] => 2
[attributes] => Array
(
аттрибуты
)
)
Array
(
[tag] => NAME
[type] => complete
[level] => 3
[value] => значение
)
Array
(
[tag] => TITLE
[type] => complete
[level] => 3
[value] => значение
)
Array
(
[tag] => COMMENT
[type] => complete
[level] => 3
[value] => значение
)
...
...
...
...
Array
(
[tag] => CATEGORY
[type] => close
[level] => 2
)
|
... а дальше начинается - новый блок данных. Так вот как разделить их? Как получить то, что между первым type=>open и type=>close - в одну кучку, то, что между вторыми - в другую, и так далее? | |
|
|
|
|
|
|
|
для: Shorr Kan
(05.01.2006 в 05:09)
| | Вот эти массивы являются отдельными и независимыми или входят как элементы в состав другого большого массива? | |
|
|
|
|
|
|
|
для: cheops
(05.01.2006 в 13:39)
| | Отдельные. Взяв их кодом
<?
$simple = file_get_contents("url");
$p = xml_parser_create();
xml_parse_into_struct($p,$simple,$vals,$index);
xml_parser_free($p);
?>
|
Я получил
$vals[1] - это тег CATEGORY с type open , а $vals[7] (допустим 7 - это вовсе необязательно - там разное количество элементов на level 3) - это тег CATEGORY с type close . | |
|
|
|
|
|
|
|
для: Shorr Kan
(05.01.2006 в 15:58)
| | А ну т.е. массив всё равно один - $vals? А тип complete что обозначает? И почему в первых двух массивах type равен open, а close только один? Это нормально? | |
|
|
|
|
|
|
|
для: cheops
(05.01.2006 в 18:22)
| | Да, $vals - один.
[tag] => CATEGORIES
[type] => open
[level] => 1
Обратите внимание - CATEGORIES , а не CATEGORY ... и level - 1. В самом конце - аналогично, но CATEGORIES - type=>close.
Далее, идет level 2 - CATEGORY open , и CATEGORY close , а между - идет level 3 - там типы complete (они не открываются/закрываются - а появляются единично... Ну как тег <br> - не требует закрытия).
Иными словами - забудьте о CATEGORIES. $vals[0] и $vals[count($vals)-1] - можно выкинуть. Они не нужны - это ВНЕШНИЕ, единичные теги. Важны только Level 2 и level 3. | |
|
|
|
|
|
|
|
для: Shorr Kan
(05.01.2006 в 19:26)
| | Вероятно разумно было бы пройтись по массиву $vals циклом foreach
<?php
$flag = false;
$i = 0;
foreach($vals as $arr)
{
if($arr['tag'] == 'CATEGORIES' && $arr['level'] == 1 && $arr['type'] == 'open')
{
// Начинаем разбор товара
$flag = true;
$i++;
}
if($arr['tag'] == 'CATEGORIES' && $arr['level'] == 1 && $arr['type'] == 'close')
{
// Товар кончился - ищем другой
$flag = false;
}
if($flag)
{
// Здесь разбираем товар номер $i
}
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(05.01.2006 в 22:40)
| | Ага. Я рассчитывал делать разбор вне массива... Но вы правы - это прекрасный вариант. Спасибо. | |
|
|
|