2015-07-29 6 views
0

Я работаю на сайте недвижимости. Мое требование - импортировать информацию о недвижимости с ее изображениями и удобствами и хранить их в базе данных. У меня есть xml-массив, и я хочу преобразовать его в php-массив. У меня есть массив xml:Как преобразовать массив xml в php-массив

SimpleXMLElement Object 
    (
     [Listing] => Array 
      (
       [0] => SimpleXMLElement Object 
        (
         [count] => 1 
         [Ad_Type] => Rent 
         [Unit_Type] => Office 
         [Unit_Model] => SimpleXMLElement Object 
          (
          ) 

         [Primary_View] => SimpleXMLElement Object 
          (
          ) 

         [Unit_Builtup_Area] => 7593.00 
         [No_of_Bathroom] => 2 
         [Property_Title] => Business Center/BANKS offices/ Call Centre Offices 
         [Web_Remarks] => SimpleXMLElement Object 
          (
          ) 

         [Emirate] => Dubai 
         [Community] => Sheikh Zayed Road 
         [Property_Name] => Millennium Plaza 
         [Property_Ref_No] => AMB-R-1142 
         [Listing_Agent] => Janette Ceniza 
         [Listing_Agent_Phone] => 0564843282 
         [Listing_Date] => 2015-03-26 4:53:51 pm 
         [Last_Updated] => 2015-07-29 1:44:23 pm 
         [Bedrooms] => SimpleXMLElement Object 
          (
          ) 

         [Listing_Agent_Email] => [email protected] 
         [Price] => 1200000 
         [Frequency] => per year 
         [Unit_Reference_No] => AMB-R-1142 
         [No_of_Rooms] => SimpleXMLElement Object 
          (
          ) 

         [Latitude] => 25.062252 
         [Longitude] => 55.130672 
         [unit_measure] => Sq.Ft. 
         [Featured] => 0 
         [Images] => SimpleXMLElement Object 
          (
           [image] => Array 
            (
             [0] => http://crm.propspace.com/watermark?c_id=1605&l_id=1576257622628120&aid=1447092&id=14273740230306248&image=26_03_2015-16_54_19-1605-6d8e8f3aa6e53b45154eac91e2109ba4.jpg 
             [1] => http://crm.propspace.com/watermark?c_id=1605&l_id=1576257622628120&aid=1447092&id=14273740230306248&image=26_03_2015-16_54_35-1605-660a612b520978e1249c29b7fb591b45.jpg 
             [2] => http://crm.propspace.com/watermark?c_id=1605&l_id=1576257622628120&aid=1447092&id=14273740230306248&image=26_03_2015-16_54_36-1605-01d394a6a096b9a0252b30a10fd59c13.jpg 
             [3] => http://crm.propspace.com/watermark?c_id=1605&l_id=1576257622628120&aid=1447092&id=14273740230306248&image=26_03_2015-16_54_38-1605-80df60708c007c5a85721b89c97836d8.jpg 
             [4] => http://crm.propspace.com/watermark?c_id=1605&l_id=1576257622628120&aid=1447092&id=14273740230306248&image=26_03_2015-16_54_38-1605-1f9ffdde85af52dfc6f3548264c34ce0.jpg 
             [5] => http://crm.propspace.com/watermark?c_id=1605&l_id=1576257622628120&aid=1447092&id=14273740230306248&image=26_03_2015-16_54_44-1605-322badce946a4883abe602bf8c221a93.jpg 
             [6] => http://crm.propspace.com/watermark?c_id=1605&l_id=1576257622628120&aid=1447092&id=14273740230306248&image=26_03_2015-16_54_44-1605-117288432442fd54dae0e68238f39537.jpg 
             [7] => http://crm.propspace.com/watermark?c_id=1605&l_id=1576257622628120&aid=1447092&id=14273740230306248&image=26_03_2015-16_54_54-1605-914e38a1abe6418ea10885b94e4f26de.jpg 
             [8] => http://crm.propspace.com/watermark?c_id=1605&l_id=1576257622628120&aid=1447092&id=14273740230306248&image=26_03_2015-16_54_55-1605-fc756a57f7280678b41b07340e3d1e60.jpg 
             [9] => http://crm.propspace.com/watermark?c_id=1605&l_id=1576257622628120&aid=1447092&id=14273740230306248&image=26_03_2015-16_54_55-1605-53eb6e2277f1b19ee40a36660086a20e.jpg 
             [10] => http://crm.propspace.com/watermark?c_id=1605&l_id=1576257622628120&aid=1447092&id=14273740230306248&image=26_03_2015-16_58_36-1605-9e54faba2c9f96e31646c0660f3f0153.jpg 
            ) 

          ) 

         [Facilities] => SimpleXMLElement Object 
          (
           [facility] => Array 
            (
             [0] => Built in wardrobes 
             [1] => Covered parking 
             [2] => Public parking 
            ) 

          ) 

         [company_name] => Amber Real Estate 
         [Web_Tour] => SimpleXMLElement Object 
          (
          ) 

         [Threesixty_Tour] => SimpleXMLElement Object 
          (
          ) 

         [Audio_Tour] => SimpleXMLElement Object 
          (
          ) 

         [Virtual_Tour] => SimpleXMLElement Object 
          (
          ) 

         [QR_Code] => SimpleXMLElement Object 
          (
          ) 

         [company_logo] => http://crm.propspace.com/application/views/pictures/logos/16051408971828.png 
         [Parking] => 2 
         [Strno] => SimpleXMLElement Object 
          (
          ) 

         [PreviewLink] => http://crm.propspace.com/preview/index/14273740230306248/1605/?l_id=1576257622628120 
        ) 
      ) 
     ) 

Существует несколько записей, подобных этому. Я дал первую запись для справки. Для преобразования этого XML в массив PHP Я написал следующий код: -

function convert_xml($xml){ 
    $arr = array(); 
    foreach($xml->children() as $property){ 
     if(count($property->children()) == 0){ 
      $arr[$property->getName()] = strval($property); 
     }else{ 
      $arr[$property->getName()][] = xml2array($property); 
     } 
    } 
    return $arr; 
} 
$xml_Arr = convert_xml($xml); 
echo "<pre>"; print_r($xml_Arr); exit; 

я получаю результат в PHP массива, приведенный ниже.

Array 
     (
      [Listing] => Array 
       (
        [0] => Array 
         (
          [count] => 1 
          [Ad_Type] => Rent 
          [Unit_Type] => Office 
          [Unit_Model] => 
          [Primary_View] => 
          [Unit_Builtup_Area] => 7593.00 
          [No_of_Bathroom] => 2 
          [Property_Title] => Business Center/BANKS offices/ Call Centre Offices 
          [Emirate] => Dubai 
          [Community] => Sheikh Zayed Road 
          [Property_Name] => Millennium Plaza 
          [Property_Ref_No] => AMB-R-1142 
          [Listing_Agent] => Janette Ceniza 
          [Listing_Agent_Phone] => 0564843282 
          [Listing_Date] => 2015-03-26 4:53:51 pm 
          [Last_Updated] => 2015-07-29 1:44:23 pm 
          [Bedrooms] => 
          [Listing_Agent_Email] => [email protected] 
          [Price] => 1200000 
          [Frequency] => per year 
          [Unit_Reference_No] => AMB-R-1142 
          [No_of_Rooms] => 
          [Latitude] => 25.062252 
          [Longitude] => 55.130672 
          [unit_measure] => Sq.Ft. 
          [Featured] => 0 
          [Images] => Array 
           (
            [0] => Array 
             (
              [image] => http://crm.propspace.com/watermark?c_id=1605&l_id=1576257622628120&aid=1447092&id=14273740230306248&image=26_03_2015-16_58_36-1605-9e54faba2c9f96e31646c0660f3f0153.jpg 
             ) 

           ) 

          [Facilities] => Array 
           (
            [0] => Array 
             (
              [facility] => Public parking 
             ) 

           ) 

          [company_name] => Amber Real Estate 
          [Web_Tour] => 
          [Threesixty_Tour] => 
          [Audio_Tour] => 
          [Virtual_Tour] => 
          [QR_Code] => 
          [company_logo] => http://crm.propspace.com/application/views/pictures/logos/16051408971828.png 
          [Parking] => 2 
          [Strno] => 
          [PreviewLink] => http://crm.propspace.com/preview/index/14273740230306248/1605/?l_id=1576257622628120 
         ) 
         ) 
         ) 

Внутри массива изображений имеется 10 элементов, но он возвращает только последнее изображение. Я хочу, чтобы в моем результате также был массив изображений.

+0

Зачем вам сначала преобразовывать это в массив? Почему вы не можете просто использовать этот XML для вставки значений в свою базу данных? – Gordon

+0

Я пытался это сделать, но он создает так много проблем, и я должен создать работу cron для того же самого, что будет работать каждый день. Так что для cron job лучше, если у меня есть php-массив вместо xml –

+0

Какие проблемы он создал? Для того, чтобы вставлять эти данные, повторение этого графа SimpleXml не сильно отличается от итерации по массиву. – Gordon

ответ

-1
foreach($xml->children() as $key=>$property){ 

    if(count($property->children()) == 0){ 

     $arr[$property->getName()] = strval($property); 

    }else{ 

     $arr[$property->getName()][$key] = xml2array($property); 

    } 

} 
+0

и что это за функция 'xml2array'? – Gordon

+0

вы можете использовать ключ $ key для массива. он будет вставлять новое значение каждый раз. –

+0

Спасибо за ваш ответ, ребята. Я пробовал этот код, он возвращает мне последнюю запись из массива. Это не работает. Вместо xml2array это будет convert_xml, я забыл переименовать этот –

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