2016-02-16 3 views
1

Я получаю данные из нескольких методов SOAP. С simplexml_load_string() я могу получить конкретные данные и с помощью цикла foreach я могу отображать значения из этого метода.Объединить данные из разных методов SOAP

Вот часть моего кода для двух методов результатов:

foreach($sxml1->NewDataSet->HotelFacility as $item) { 
    echo '<div class="hotel">'; 
    echo '<div class="name">' . $item->FacName . '</div>'; 
    echo '</div>'; 
} 
foreach($sxml2->NewDataSet->HotelPresentation as $item) { 
    echo '<div class="hotel">'; 
    echo '<div class="desc">' . $item->PresText . '</div>'; 
    echo '</div>'; 
} 

Как я могу присоединиться к этим значению в один главном отеле ДИВА HTML структуру, как это:

<div class="hotel"> 
    <div class="name">the_value_from_the_first_method</div> 
    <div class="desc">the_value_from_the_second_method</div> 
</div> 

<div class="hotel"> 
    <div class="name">the_value_from_the_first_method</div> 
    <div class="desc">the_value_from_the_second_method</div> 
</div> 

<div class="hotel"> 
    <div class="name">the_value_from_the_first_method</div> 
    <div class="desc">the_value_from_the_second_method</div> 
</div>... 

Примечание: Номер divs будет динамически отображаться в результате метода SOAP, поэтому результат должен быть получен из цикла foreach.

+0

Дубликат http://stackoverflow.com/questions/35418407/combine-loop-values-from -различные мыльные методы/ –

ответ

2

Чтобы объединить значения из отдельных simpleXMLelement объектов (решение с функцией array_map):

$sxml1 = simplexml_load_string($xml1); 
$sxml2 = simplexml_load_string($xml2); 

$hotelFac = $hotelPres = []; 
foreach($sxml1->NewDataSet->HotelFacility as $item) { 
    $hotelFac[] = '<div class="hotel"><div class="name">' . $item->FacName . '</div>'; 
} 
foreach($sxml2->NewDataSet->HotelPresentation as $item) { 
    $hotelPres[] = '<div class="desc">' . $item->PresText . '</div></div>'; 
} 

$result = array_map(function($name, $desc){ 
    return $name . $desc; 
}, $hotelFac, $hotelPres); 

echo implode('', $result); 

http://php.net/manual/en/function.array-map.php

+0

Привет, Роман. Я пробовал ваше решение, но я получаю сообщение об ошибке: ** Warning: array_map(): Аргумент # 2 должен быть массивом **, и он ничего не отображает. – user2519032

+0

Не $ sxml1-> NewDataSet-> HotelFacility' массив объектов? Что дает 'var_dump (gettype ($ sxml1-> NewDataSet-> HotelFacility));'? – RomanPerekhrest

+0

он дает: 'string (6)" object "' – user2519032

Смежные вопросы