2015-01-17 2 views
0

Я пытаюсь вытащить ImageUrl «с, Lat и Long из массива PHP, где я предоставить HotelCode: $hotelCodeизвлечения данных из PHP массива на основе данного распространял информацию

Мой файл XML выглядит подобно код ниже:

<Hotels> 
    <Hotel> 
     <HotelCode>Code<HotelCode> 
     <Latitude>Lat</Latitude> 
     <Longitude>Long</Longitude> 
     <HotelImages> 
      <ImageURL>file.jpg</ImageURL> 
      <ImageURL>file2.jpg</ImageURL> 
      .... 
     </HotelImages> 
    </Hotel> 
    .... 
</Hotels> 

Мой PHP код:

$xmlstring = file_get_contents($xmlurl); 
$xml = simplexml_load_string($xmlstring); 
$json = json_encode($xml); 
$hotels = json_decode($json,TRUE); 

print_r($hotels) is: 

Array ( 
    [Hotel] => Array ( 
     [0] => Array ( 
      [HotelCode] => ES002A 
      [comment] => Array ( 
        [0] => Array ()) 
      [Latitude] => 37.396792 
      [Longitude] => -5.992054 
      [HotelImages] => Array ( 
       [ImageURL] => Array ( 
        [0] => http://image.metglobal.com/hotelimages/ES002A/9405329_0x0.jpg 
        [1] => http://image.metglobal.com/hotelimages/ES002A/9405330_0x0.jpg 
        [2] => http://image.metglobal.com/hotelimages/ES002A/9405331_0x0.jpg 
       ) 
      ) 
     ) 

print_r($hotelCodes) is 

Array ([0] => ESG56G [1] => ES0Z10) 

I попробовали несколько разных методов, но никто из них не работал.

+0

Когда это xml, вы можете использовать 'xpath' вместо JSON. «Xpath» более эффективен для выбора данных. – Mouser

+0

@Mouser Я пробовал с xpath, но очень медленно загружался до 1 минуты –

+0

Насколько велик этот xml-файл? – Mouser

ответ

0

Ну, во-первых, у вас есть ошибка в вашем xml.

<HotelCode>Code<HotelCode> 

Должно быть:

<HotelCode>Code</HotelCode> 

После этого вы можете получить изображения с:

$hotels['Hotel']['HotelImages']['ImageURL'][0]; 

и

$hotels['Hotel']['HotelImages']['ImageURL'][0]; 

И Lat долго respectivly:

$hotels['Hotel']['Latitude']; 

$hotels['Hotel']['Longitude']; 

Вы можете обойти массив [Hotel] с помощью foreach и проверить, соответствует ли элемент [HotelCode] тому, который вы предоставили, и после этого вернуть свойства lat и long.

foreach ($hotels as $hotel) { 
    if($hotel['HotelCode'] == 'YourCode'){ 
     echo $hotel['Latitude']; 
     echo $hotel['Longtitude']; 
    } 
} 
+0

Да, я знаю, но как я могу вытащить изображениеURL, где я предоставляю HotelCode? –

+0

См. Ответы на изменения. – luleksde

0

Использование array_keys

$hotelCodes = array_keys($hotels, "HotelCode"); 

Это возвращает все значения с ключом "HotelCode". Затем вы можете перебрать массив с этими значениями.

foreach ($hotelCodes as $code) 
{ 
    $iUrls = $hotels[$code]['HotelImages']['ImageURL']; 
    foreach ($iUrls as $iUrl) 
    { 
     echo $iUrl; 
    } 
    echo $hotels[$code]['Latitude']; 
    echo $hotels[$code]['Longitude']; 
}