展平php数组并加入索引

时间:2013-06-17 09:37:05

标签: php xml arrays recursion

我有一些具有这种结构的数据数组(xml):

product
    name => "some name"
    images
        image => "1.jpg"
        image => "2.jpg"
        image => "3.jpg"
    description => "lorem ipsum"
    categories
        category => 3939
        category => 685
    price => 300
    importers
        importer => "importer1"

某些行(例如“name”)为字符串或整数,有些则为嵌套项(例如图像)。

我需要将它设置为平面和1级数组,当行有一些嵌套数组时,子项的索引名称应该与父项连接,所以它看起来像这样:

product
    name => "some name"
    images_image => "1.jpg,2.jpg,3.jpg"
    description => "lorem ipsum"
    categories_category => "3939,685"
    price => 300
    importers_importer => "importer1"

可以更深地嵌套数组,因此有时需要连接更多索引(因此需要recursion

这似乎是一个简单的逻辑,但我有更长时间的问题,并且无法弄清楚如何让它工作。

嵌套数组只有'same-type children'。因此,如果其中一个是例如名为

的“图像”

即使是一些伪代码对我也有帮助。

1 个答案:

答案 0 :(得分:2)

<?php
function array_flatten_recursive($in_array) {
  $out_array = array();
  foreach ($in_array as $key => $value) {
    if( is_array($value) ){
      $rec_array = array_flatten_recursive($value);
      foreach ($rec_array as $rec_key => $rec_value) {
        $out_array["{$key}_{$rec_key}"] = $rec_value;
      }
    } else {
      $out_array[$key] = $value;      
    }
  }
  return $out_array;
}

eval.in上的演示