За последние 24 часа нас посетили 71316 программистов и 10240 роботов. Сейчас ищут 2904 программиста ...

SOAP перебрать данные из многомерного массива

Тема в разделе "PHP для новичков", создана пользователем dorwi, 1 ноя 2017.

  1. dorwi

    dorwi Новичок

    С нами с:
    1 ноя 2017
    Сообщения:
    4
    Симпатии:
    0
    Всем доброе время суток! Уже задал вопрос на другом форуме, но ответа пока что не получил, может здесь найду ответ.
    Есть код:

    PHP:
    1.     <?php
    2.  
    3.         $client = new SoapClient("http://xxx.ru/WCF/ClientService.svc?wsdl");
    4.         $params =  array
    5.         (
    6.             'login' => 'test',
    7.             'password' => 'test',
    8.             'filter' => array(
    9.                 'season_list' => array(0 => 'w'),
    10.                 'width_min' => 185,
    11.                 'width_max' => 185,
    12.                 'height_min' => 60,
    13.                 'height_max' => 60,
    14.                 'diameter_min' => 15,
    15.                 'diameter_max' => 15,
    16.             ),
    17.             'page' => 0,
    18.         );
    19.         $answer = $client->GetFindTyre($params);
    Мне нужно перебрать элементы массива, делаю так -

    PHP:
    1. for ($index = 0; $index < count($answer->GetFindTyreResult->price_rest_list->TyrePriceRest); $index++){
    2.          foreach ($answer->GetFindTyreResult->price_rest_list->TyrePriceRest[$index] as $value)
    3.               {
    4.                 print_r($value);
    Вывод print_r($value) -
    2884F5153Nhttp://xxx.ru/pictures/tyres/Yokohama/iceGuard_Stud_iG35/big/1.png
    http://xxx.ru/pictures/tyres/Yokohama/iceGuard_Stud_iG35/small/1.png
    YokohamaiceGuard Stud iG35185/60R15 88T XL iceGuard Stud iG35 TL + (шип.)w1carstdClass Object
    ( [wh_price_rest] => Array ( [0] => stdClass Object ( [price] => 2884
    [price_rozn] => 3230 [rest] => 33 [wrh] => 42 ) [1] => stdClass Object ( [price] => 2884 [price_rozn] => 3230
    [rest] => 2 [wrh] => 22 ) ) )

    2425500http://xxx.ru/pictures/tyres/Pirelli/Winter_Ice_Zero/big/1.png
    http://xxx.ru/pictures/tyres/Pirelli....pngPirelliIce Zero185/60R15 88T XL Ice Zero (шип.)w1
    carstdClass Object ( [wh_price_rest] => Array ( [0] => stdClass Object ( [price] => 3345 [price_rozn] => 3840
    [rest] => 3 [wrh] => 42 ) [1] => stdClass Object ( [price] => 3345 [price_rozn] => 3840 [rest] => 24 [wrh] => 43 ) ) )

    2166983http://xxx.ru/pictures/tyres/Kumho_Marshal/WinterCraft_Ice_WI31/big/1.png
    http://xxx.ru/pictures/tyres/Kumho_M...halWinterCraft Ice WI31185/60R15 88T XL WinterCraft Ice WI31 (шип.)w1car
    stdClass Object ( [wh_price_rest] => Array ( [0] => stdClass Object ( [price] => 2683 [price_rozn] => 3000
    [rest] => 41 [wrh] => 42 ) [1] => stdClass Object ( [price] => 2683 [price_rozn] => 3000 [rest] => 41
    [wrh] => 22 ) [2] => stdClass Object ( [price] => 2683 [price_rozn] => 3000 [rest] => 19 [wrh] => 43 )
    [3] => stdClass Object ( [price] => 2683 [price_rozn] => 3000 [rest] => 4 [wrh] => 1 ) ) )


    Получаю в принципе то что мне нужно.
    Но если я начинаю просто выводить это через echo -

    PHP:
    1. echo $value;
    2. }
    3. }
    4. ?>
    выводит только, как я понимаю значение 1 элемента массива: 2884F5153Nhttp://xxx.ru/pictures/tyres/Yokohama/iceGuard_Stud_iG35/big/1.png
    http://xxx.ru/pictures/tyres/Yokoham...kohamaiceGuard Stud iG35185/60R15 88T XL iceGuard Stud iG35 TL + (шип.)w1car


    Помогите, подскажите почему так происходит и как мне вывести этот многомерный массив корректно?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    вырвиглаз. А стразами еще можно ? мало красителей в результативном выводе и скопировав не из исходной страницы. Такой вывод лень разбирать.

    покажи результат

    print_r ( $answer->GetFindTyreResult->price_rest_list->TyrePriceRest );
    Без циклов!
    Скопировав из исходной страницы ctrl+u
    И без макияжа!
    --- Добавлено ---
    P.s: с циклами код премию ждет за оригинальность
     
    gruth нравится это.
  3. dorwi

    dorwi Новичок

    С нами с:
    1 ноя 2017
    Сообщения:
    4
    Симпатии:
    0
    Вот такой вывод:
    Код (Text):
    1. Array ( [0] => stdClass Object ( [code] => 613949 [img_big_my] => [img_big_pish] => http://www.xxx.ru/pictures/tyres/BFGoodrich/G-Force_Stud/big/1.png [img_small] => http://www.xxx.ru/pictures/tyres/BFGoodrich/G-Force_Stud/small/1.png [marka] => BFGoodrich [model] => G-Force Stud [name] => 185/60R15 88Q XL G-Force Stud TL (шип.) [season] => w [thorn] => 1 [type] => car [whpr] => stdClass Object ( [wh_price_rest] => Array ( [0] => stdClass Object ( [price] => 2761 [price_rozn] => 3170 [rest] => 41 [wrh] => 42 ) [1] => stdClass Object ( [price] => 2761 [price_rozn] => 3170 [rest] => 41 [wrh] => 22 ) [2] => stdClass Object ( [price] => 2761 [price_rozn] => 3170 [rest] => 41 [wrh] => 43 ) [3] => stdClass Object ( [price] => 2761 [price_rozn] => 3170 [rest] => 2 [wrh] => 1 ) ) ) )
    2. [1] => stdClass Object ( [code] => 2425500 [img_big_my] => [img_big_pish] => http://www.xxx.ru/pictures/tyres/Pirelli/Winter_Ice_Zero/big/1.png [img_small] => http://www.xxx.ru/pictures/tyres/Pirelli/Winter_Ice_Zero/small/1.png [marka] => Pirelli [model] => Ice Zero [name] => 185/60R15 88T XL Ice Zero (шип.) [season] => w [thorn] => 1 [type] => car [whpr] => stdClass Object ( [wh_price_rest] => Array ( [0] => stdClass Object ( [price] => 3345 [price_rozn] => 3840 [rest] => 3 [wrh] => 42 ) [1] => stdClass Object ( [price] => 3345 [price_rozn] => 3840 [rest] => 20 [wrh] => 43 ) [2] => stdClass Object ( [price] => 3345 [price_rozn] => 3840 [rest] => 20 [wrh] => 1 ) ) ) )
    3. [2] => stdClass Object ( [code] => R0230 [img_big_my] => [img_big_pish] => http://www.xxx.ru/pictures/tyres/Yokohama/iceGuard_Studless_iG50Plus/big/0.png [img_small] => http://www.xxx.ru/pictures/tyres/Yokohama/iceGuard_Studless_iG50Plus/small/0.png [marka] => Yokohama [model] => iceGuard Studless iG50+ [name] => 185/60R15 84Q iceGuard Studless iG50+ [season] => w [thorn] => [type] => car [whpr] => stdClass Object ( [wh_price_rest] => Array ( [0] => stdClass Object ( [price] => 3170 [price_rozn] => 3650 [rest] => 12 [wrh] => 42 ) [1] => stdClass Object ( [price] => 3170 [price_rozn] => 3650 [rest] => 36 [wrh] => 22 ) [2] => stdClass Object ( [price] => 3170 [price_rozn] => 3650 [rest] => 4 [wrh] => 43 ) [3] => stdClass Object ( [price] => 3170 [price_rozn] => 3650 [rest] => 41 [wrh] => 1 ) [4] => stdClass Object ( [price] => 3170 [price_rozn] => 3650 [rest] => 41 [wrh] => 9 ) ) ) )
    Цветом хотел помочь, а получилось видимо наоборот ) Ну очень давно не практиковал php, теперь вот решил через насколько лет вернуться в кодинг. Мне главное понять как обработать получаемые данные, красотой и функциональностью кода займусь потом.
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    это не многомерный массив, а массив объектов.
    Красиво и читабельно вывести можно вот так:
    PHP:
    1. echo '<pre>';
    2. print_r(/* переменная */);
    3. echo '</pre>';
     
  5. dorwi

    dorwi Новичок

    С нами с:
    1 ноя 2017
    Сообщения:
    4
    Симпатии:
    0
    спасибо конечно за подсказки, красиво выводит , но не решает моей проблемы. Мне нужно вывести обычным списком.
    например: название элемента массива - значение.
    Код (Text):
    1. [0]
    2.             [code] => 613949
    3.             [img_big_my] =>
    4.             [marka] => BFGoodrich
    5.             [model] => G-Force Stud
    6.             [name] => 185/60R15 88Q XL G-Force Stud TL (шип.)
    7.             [season] => w
    8.             [thorn] => 1
    9.             [type] => car
    10. [1]
    11.             [code] => 2425500
    12.             [marka] => Pirelli
    13.             [model] => Ice Zero
    14.             [name] => 185/60R15 88T XL Ice Zero (шип.)
    15.             [season] => w
    16.             [thorn] => 1
    17.             [type] => car
    или в табличном виде, в конечном счете хотелось бы это все оформить.
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    У вас сейчас такая же структура как и описали

    достаточно увидеть это возможно путем смены типа содержимого / stdClass разрешит сменить тип его результата.
    PHP:
    1. print_r ( (array)$answer->GetFindTyreResult->price_rest_list->TyrePriceRest );
    --- Добавлено ---
    а вот допустим через цикл пример:

    PHP:
    1. foreach ( $answer->GetFindTyreResult->price_rest_list->TyrePriceRest AS $items )
    2. {
    3.     printf ( 'код: %d | модель: %s',  $items -> code, $items -> model ) . PHP_EOL;
    4. }
    и должно вывести :

    код: 613949 | модель: G-Force Stud
    код: 2425500 | модель: Ice Zero
    ...
     
    dorwi нравится это.
  7. dorwi

    dorwi Новичок

    С нами с:
    1 ноя 2017
    Сообщения:
    4
    Симпатии:
    0
    Спасибо большое за помощь, буду дальше разбираться