Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Разделение массивов xml
 
 автор: Shorr Kan   (05.01.2006 в 05:09)   письмо автору
 
 

После запроса к 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 - в одну кучку, то, что между вторыми - в другую, и так далее?

   
 
 автор: cheops   (05.01.2006 в 13:39)   письмо автору
 
   для: Shorr Kan   (05.01.2006 в 05:09)
 

Вот эти массивы являются отдельными и независимыми или входят как элементы в состав другого большого массива?

   
 
 автор: Shorr Kan   (05.01.2006 в 15:58)   письмо автору
 
   для: 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 .

   
 
 автор: cheops   (05.01.2006 в 18:22)   письмо автору
 
   для: Shorr Kan   (05.01.2006 в 15:58)
 

А ну т.е. массив всё равно один - $vals? А тип complete что обозначает? И почему в первых двух массивах type равен open, а close только один? Это нормально?

   
 
 автор: Shorr Kan   (05.01.2006 в 19:26)   письмо автору
 
   для: 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.

   
 
 автор: cheops   (05.01.2006 в 22:40)   письмо автору
 
   для: Shorr Kan   (05.01.2006 в 19:26)
 

Вероятно разумно было бы пройтись по массиву $vals циклом foreach
<?php
  $flag 
false;
  
$i 0;
  foreach(
$vals as $arr)
  {
    if(
$arr['tag'] == 'CATEGORIES' && $arr['level'] == && $arr['type'] == 'open')
    {
      
// Начинаем разбор товара
      
$flag true;
      
$i++;
    }
    if(
$arr['tag'] == 'CATEGORIES' && $arr['level'] == && $arr['type'] == 'close')
    {
      
// Товар кончился - ищем другой
      
$flag false;
    }
    if(
$flag)
    {
      
// Здесь разбираем товар номер $i
    
}
  }
?>

   
 
 автор: Shorr Kan   (06.01.2006 в 15:45)   письмо автору
 
   для: cheops   (05.01.2006 в 22:40)
 

Ага. Я рассчитывал делать разбор вне массива... Но вы правы - это прекрасный вариант. Спасибо.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования