递归循环和嵌套多维数组的问题

时间:2012-05-11 18:04:40

标签: php arrays multidimensional-array

我这里有一个嵌套的多维数组:

Array
(
[merchant] => Array
    (
        [XML_Serializer_Tag] => Array
            (
                [id] => 736
                [name] => Cadbury Gifts Direct
            )

        [prod] => Array
            (
                [XML_Serializer_Tag] => Array
                    (
                        [0] => Array
                            (
                                [XML_Serializer_Tag] => Array
                                    (
                                        [id] => 88966064
                                        [pre_order] => no
                                        [web_offer] => no
                                        [in_stock] => no
                                        [stock_quantity] => 0
                                    )

                                [pId] => 608
                                [isbn] => 0000000000000
                                [text] => Array
                                    (
                                        [name] => 50% OFF 56g Creme Egg Minis
                                        [desc] => 50% OFF Creme Egg Minis in a 56g bag.
                                    )

                                [uri] => Array
                                    (
                                        [awTrack] => http://www.awin1.com/pclick.php?p=88966064&a=67702&m=736
                                        [awThumb] => http://images.productserve.com/thumb/736/88966064.jpg
                                        [awImage] => http://images.productserve.com/preview/736/88966064.jpg
                                        [mLink] => http://www.cadburygiftsdirect.co.uk/products/608-50-off-56g-creme-egg-minis.aspx
                                        [mImage] => http://www.cadburygiftsdirect.co.uk/images/thumbs/0001084.png
                                    )

                                [price] => Array
                                    (
                                        [XML_Serializer_Tag] => Array
                                            (
                                                [curr] => GBP
                                            )

                                        [buynow] => 0.31
                                        [store] => 0.00
                                        [rrp] => 0.00
                                        [delivery] => 0.00
                                    )

                                [cat] => Array
                                    (
                                        [awCatId] => 437
                                        [awCat] => Chocolate
                                        [mCat] => Full Range
                                    )

                                [brand] => 
                                [valFrom] => 0000-00-00
                                [valTo] => 0000-00-00
                                [comAmount] => 0.00
                            )

之后的细分循环。

因此...

[1] => Array
[2] => Array
[3] => Array

等...

我需要找到每个数组段的属性名称。

所以我使用了这个递归循环:

private function recursive_array($old_array, $new_array = array()) {

    foreach ($old_array as $key => $value) {

        if (is_array($value) && $key < 1) {
            $new_array = $this->recursive_array($value, $new_array);

        } else {
            if ($key < 1) {
                $new_array[] = $key;

            }
        }
    }
    return $new_array;
}

这是输出:

array
  0 => string 'id' (length=2)
  1 => string 'name' (length=4)
  2 => string 'id' (length=2)
  3 => string 'pre_order' (length=9)
  4 => string 'web_offer' (length=9)
  5 => string 'in_stock' (length=8)
  6 => string 'stock_quantity' (length=14)
  7 => string 'pId' (length=3)
  8 => string 'isbn' (length=4)
  9 => string 'name' (length=4)
  10 => string 'desc' (length=4)
  11 => string 'awTrack' (length=7)
  12 => string 'awThumb' (length=7)
  13 => string 'awImage' (length=7)
  14 => string 'mLink' (length=5)
  15 => string 'mImage' (length=6)
  16 => string 'curr' (length=4)
  17 => string 'buynow' (length=6)
  18 => string 'store' (length=5)
  19 => string 'rrp' (length=3)
  20 => string 'delivery' (length=8)
  21 => string 'awCatId' (length=7)
  22 => string 'awCat' (length=5)
  23 => string 'mCat' (length=4)
  24 => string 'brand' (length=5)
  25 => string 'valFrom' (length=7)
  26 => string 'valTo' (length=5)
  27 => string 'comAmount' (length=9

最重要的是顶部嵌套数组:

[XML_Serializer_Tag] => Array
            (
                [id] => 736
                [name] => Cadbury Gifts Direct
            )

这只是整个Feed的详细信息,而不是各个细分。

我需要一种过滤掉顶部嵌套数组的方法,但请记住细节是动态的,因此键的名称可以从一个Feed更改为下一个

2 个答案:

答案 0 :(得分:2)

也许这个?

$riter = new RecursiveIteratorIterator(New RecursiveArrayIterator($array));
foreach ($riter as $key => $val) {
    if ($riter->getDepth() > 1) {
        echo "$key => $val\n";
    }
}

默认情况下,RecursiveIteratorIterator仅访问叶节点(每个路径下最深的级别)。 getDepth()可用于确保最小深度。我不确定1是否是正确的数字,但无论如何......

答案 1 :(得分:0)

使用array_shift弹出数组的第一个元素