0

ここにネストされた多次元配列があります:

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
            )

これは、個々のセグメントではなく、フィード全体の詳細です。

最上位のネストされた配列を除外する方法が必要ですが、詳細は動的であるため、キーの名前はフィードごとに変わる可能性があることに注意してください

4

2 に答える 2

2

多分これ?

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

デフォルトでは、RecursiveIteratorIteratorはリーフノード(すべてのパスの最も深いレベル)にのみアクセスします。getDepth()を使用して、最小の深さであることを確認できます。1が正しい番号かどうかはわかりませんが、とにかく...

于 2012-05-11T18:39:38.290 に答える
0

array_shift配列の最初の要素をポップオフするために使用します

于 2012-05-11T18:42:10.943 に答える