За последние 24 часа нас посетили 18806 программистов и 1618 роботов. Сейчас ищут 979 программистов ...

Чтение Json в массив PHP

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

  1. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    Давайте файл с таким содержимым. И укажите место в нем.
     
  2. kaufmanndk

    kaufmanndk Новичок

    С нами с:
    2 мар 2021
    Сообщения:
    32
    Симпатии:
    0
    Извиняюсь. думал загрузил.
    Теперь точно загрузил
     

    Вложения:

    • asin31.txt
      Размер файла:
      112,3 КБ
      Просмотров:
      2
  3. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    Это атрибут другого элемента. Предка.
    Судя по всему, префикс для отдельной группы.
    То есть примерно 123X для 1234 и 1235, a 567X для 5678, 5679 и 5670 и тд
     
  4. kaufmanndk

    kaufmanndk Новичок

    С нами с:
    2 мар 2021
    Сообщения:
    32
    Симпатии:
    0
    У меня есть один рабочий пример, но я не смог его интегрировать в Ваш код.
    Он видит все номера

    PHP:
    1.   $dom = new DOMDocument ();
    2. $dom->loadXML($response->toXML());
    3. $xp = new DOMXPath($dom);
    4. $xp->registerNamespace("default",
    5.         "http://mws.amazonservices.com/schema/Products/2011-10-01");
    6. foreach ( $xp->query("//default:GetLowestOfferListingsForASINResult") as $asin ) {  
    7. $prices = $xp->query("descendant::default:Product", $asin );
    8.         foreach ( $prices as $price )   {
    9. $ASIN = $xp->evaluate("string(descendant::default:MarketplaceASIN/default:ASIN/text())",$price);        }
     
  5. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    У вас и так все номера.
    355172304X - не номер, а имя группы для 3551723044, 3551723045, 3551723046, 3551723041 и тп
     
  6. kaufmanndk

    kaufmanndk Новичок

    С нами с:
    2 мар 2021
    Сообщения:
    32
    Симпатии:
    0
    Это именно отдельный полноценный номер товара, давайте откажемся от определения номер. Это именно Asin (Action pour une Suisse Indépendante et Neutre), как и все остальные, он не имеет ничего общего к другим Asinam / номерам.
     
  7. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    В выложенном вами файле <ASIN>355172304X</ASIN> отсутствует.
    Но есть предок <ASIN>3551723044</ASIN>
    <GetLowestOfferListingsForASINResult ASIN='355172304X' status='Success'>
     
  8. kaufmanndk

    kaufmanndk Новичок

    С нами с:
    2 мар 2021
    Сообщения:
    32
    Симпатии:
    0
    Я заново получил файл. Прикрепляю. На этот раз тут всё точно, каждый азин уникален и не принадлежит никому.
    Был запрос на 8 номеров и ответ пришёл на 8 номеров и 3 из них заканчиваются на Х.

    А вот такой ответ получаю через скрипт.
    В Верху в одну строку видны все Азины, но дальше с ценами их нет.
    Код (Text):
    1. 361302750X361302750X361302750X361302750X361302750X361302750X361302750X361302750XArray
    2. (
    3.     [0] => 3927458384"59.88"59.89"60.00"85.00"109.98"120.36"
    4.     [1] => 3730700510"5.27"5.28"7.79"11.24"11.29"12.90"
    5.     [2] => 3935063652"20.39"20.71"20.72"43.53"
    6.     [3] => 3830490364"92.00"118.95"119.00"
    7.     [4] => 3769112431"39.43"39.44"75.22"95.00"
    8. )
     

    Вложения:

    • asin333.txt
      Размер файла:
      33,7 КБ
      Просмотров:
      1
    #58 kaufmanndk, 8 мар 2021
    Последнее редактирование: 8 мар 2021
  9. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    Есть, вижу.
    Но.
    PHP:
    1. echo '<pre>';
    2. $query = '//r:ASIN';
    3. $result = $objXmlDocument->xpath($query);
    4. print_r($result);
    Всё выводится.
    Код (Text):
    1. Array
    2. (
    3.     [0] => SimpleXMLElement Object
    4.         (
    5.             [0] => 361302750X
    6.         )
    7.  
    8.     [1] => SimpleXMLElement Object
    9.         (
    10.             [0] => 3927458384
    11.         )
    12.  
    13.     [2] => SimpleXMLElement Object
    14.         (
    15.             [0] => 382286935X
    16.         )
    17.  
    18.     [3] => SimpleXMLElement Object
    19.         (
    20.             [0] => 3730700510
    21.         )
    22.  
    23.     [4] => SimpleXMLElement Object
    24.         (
    25.             [0] => 3935063652
    26.         )
    27.  
    28.     [5] => SimpleXMLElement Object
    29.         (
    30.             [0] => 342664133X
    31.         )
    32.  
    33.     [6] => SimpleXMLElement Object
    34.         (
    35.             [0] => 3830490364
    36.         )
    37.  
    38.     [7] => SimpleXMLElement Object
    39.         (
    40.             [0] => 3769112431
    41.         )
    42.  
    43. )
     
  10. kaufmanndk

    kaufmanndk Новичок

    С нами с:
    2 мар 2021
    Сообщения:
    32
    Симпатии:
    0
    Но их нет именно в этой части кода.
    Кода номера должны быть в одну строку с ценами, которые принадлежат им


    PHP:
    1. $out = array();
    2. foreach($result2 as $asin)
    3. {
    4.   $query = sprintf('//r:Product[r:Identifiers/r:MarketplaceASIN/r:ASIN=%s]/*/*/r:Price/r:LandedPrice/r:Amount', $asin);
    5.   $result = $objXmlDocument->xpath($query);
    6.      if(isset($result[0]))
    7.         {
    8.          $str = $asin.'"';
    9.           foreach($result as $item)
    10.            {
    11.            $str .= $item[0].'"';
    12.            }
    13.         $out[] = chop($str);
    14.         }
    15. }
    16. print_r ($out);
    Вот полностью Ваш код.


    PHP:
    1. <?php
    2. $objXmlDocument = simplexml_load_file("asin333.xml");
    3. $objXmlDocument->registerXPathNamespace('r', 'http://mws.amazonservices.com/schema/Products/2011-10-01');
    4. if ($objXmlDocument === FALSE) {
    5.     echo "There were errors parsing the XML file.\n";
    6.     foreach(libxml_get_errors() as $error) {
    7.         echo $error->message;
    8.     }
    9.     exit;
    10. }
    11. echo '<pre>';
    12. $result2 = $objXmlDocument->xpath('//r:ASIN');
    13. //print_r($result2);
    14.  
    15. foreach($result2 as $as)
    16. {
    17. echo $result2[0];
    18. }
    19.  
    20.  
    21.  
    22. $out = array();
    23. foreach($result2 as $asin)
    24. {
    25.   $query = sprintf('//r:Product[r:Identifiers/r:MarketplaceASIN/r:ASIN=%s]/*/*/r:Price/r:LandedPrice/r:Amount', $asin);
    26.   $result = $objXmlDocument->xpath($query);
    27.      if(isset($result[0]))
    28.         {
    29.          $str = $asin.'"';
    30.           foreach($result as $item)
    31.            {
    32.            $str .= $item[0].'"';
    33.            }
    34.         $out[] = chop($str);
    35.         }
    36. }
    37. print_r ($out);
    38. file_put_contents( 'filename.txt', join(PHP_EOL, $out), FILE_APPEND);
    39.  
    40. ?>
    Код (Text):
    1. [0] => 3927458384"59.88"59.89"60.00"85.00"109.98"120.36"
    2.     [1] => 3730700510"5.27"5.28"7.79"11.24"11.29"12.90"
    3.     [2] => 3935063652"20.39"20.71"20.72"43.53"
    4.     [3] => 3830490364"92.00"118.95"119.00"
    5.     [4] => 3769112431"39.43"39.44"75.22"95.00"
     
  11. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    Понятно.
    Проблема возникла из-за типа данных "номеров".
    Так как они на самом деле "строки"
    Вот в этой строке
    PHP:
    1. $query = sprintf('//r:Product[r:Identifiers/r:MarketplaceASIN/r:ASIN=%s]/*/*/r:Price/r:LandedPrice/r:Amount', $asin);
    Заключите %s в кавычки
    PHP:
    1. $query = sprintf('//r:Product[r:Identifiers/r:MarketplaceASIN/r:ASIN="%s"]/*/*/r:Price/r:LandedPrice/r:Amount', $asin);
     
    kaufmanndk нравится это.
  12. kaufmanndk

    kaufmanndk Новичок

    С нами с:
    2 мар 2021
    Сообщения:
    32
    Симпатии:
    0
    Супер. Работает. Огромное Вам спасибо!