За последние 24 часа нас посетили 7682 программиста и 447 роботов. Сейчас ищут 153 программиста ...

Можно ли хранить адрес свойства объекта в переменной? типа 'shop->offers'

Тема в разделе "PHP для новичков", создана пользователем Forward5, 8 фев 2021.

Метки:
  1. Forward5

    Forward5 Новичок

    С нами с:
    5 фев 2021
    Сообщения:
    11
    Симпатии:
    0
    Всем привет,
    Нужно парсить xml фиды, Сам xml файл считывается в объект SimpleXML.

    например чтобы пройтись по свойствам товаров делаю:
    PHP:
    1. $feedData=simplexml_load_file($fidurl);
    2. $exp=$feedData->offers->offer;
    3.  
    4. foreach ($exp as $offer=>$param){
    5. //код
    6. }
    Но структура и адрес до нужного тега может отличаться, и быть например $feedData->shop->offers->offer или вместо offers может быть items и т.п., так вот, возможно ли сделать что-то типа такого:
    PHP:
    1. $offerpath='shop->items->item';
    2. $offers=$feedData->$offerpath;
    3. // дальше перебираем универсально через foreach
    Такой вариант не работает, но может есть правильный синтаксис?
     
  2. Forward5

    Forward5 Новичок

    С нами с:
    5 фев 2021
    Сообщения:
    11
    Симпатии:
    0
    Пока придумал такой вариант:
    PHP:
    1.  $path='shop->items->item';
    2.     $exp=$feedData;
    3.     $path=explode('->',$path);
    4.     foreach ($path as $lvl){
    5.         $exp=$exp->{$lvl};
    6.        
    7.     }
    Если есть решение лучше буду рад
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.867
    Симпатии:
    1.101
    Адрес:
    Лень
    Велосипед от которого смысла 0
     
  4. Drunkenmunky

    Drunkenmunky Новичок

    С нами с:
    12 авг 2020
    Сообщения:
    664
    Симпатии:
    129
    PHP:
    1. <?php
    2. $xml = simplexml_load_file('file.xml');
    3. $result = $xml->xpath("//offer");
    4. print_r($result);
    5. ?>
     
    [vs] нравится это.
  5. Forward5

    Forward5 Новичок

    С нами с:
    5 фев 2021
    Сообщения:
    11
    Симпатии:
    0
    Да, это лучше, Спасибо!
     
  6. php8guru

    php8guru Новичок

    С нами с:
    24 янв 2021
    Сообщения:
    8
    Симпатии:
    0
    Проблема будет если xml большой.
    Почитайте про xmlreader
    Там на этапе чтения будете выбирать толтко узлы offer