1

ItemLookupを使用してリクエストされた商品に対してAmazonProductAPIが返すbrowsenodes配列をループしようとしていますが、返される配列のレベル数が常に異なるため、確実に行う方法がわかりません。

たとえば、SimpleXMLイテレータを提案する他の回答をここで探しましたが、xmlとして解析できなかったため、機能せず、例外がスローされます...

アマゾンによって返される配列は次のようになります。

[BrowseNodes] => SimpleXMLElement Object
    (
        [BrowseNode] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [BrowseNodeId] => 172659
                        [Name] => Televisions
                        [Ancestors] => SimpleXMLElement Object
                            (
                                [BrowseNode] => SimpleXMLElement Object
                                    (
                                        [BrowseNodeId] => 1266092011
                                        [Name] => Television & Video
                                        [Ancestors] => SimpleXMLElement Object
                                            (
                                                [BrowseNode] => SimpleXMLElement Object
                                                    (
                                                        [BrowseNodeId] => 493964
                                                        [Name] => Categories
                                                        [IsCategoryRoot] => 1
                                                        [Ancestors] => SimpleXMLElement Object
                                                            (
                                                                [BrowseNode] => SimpleXMLElement Object
                                                                    (
                                                                        [BrowseNodeId] => 172282
                                                                        [Name] => Electronics
                                                                    )

                                                            )

                                                    )

                                            )

                                    )

                            )

                    )

またはこれは例えば:

[BrowseNodes] => SimpleXMLElement Object
                    (
                        [BrowseNode] => SimpleXMLElement Object
                            (
                                [BrowseNodeId] => 3764321
                                [Name] => Chin Strips
                                [Ancestors] => SimpleXMLElement Object
                                    (
                                        [BrowseNode] => SimpleXMLElement Object
                                            (
                                                [BrowseNodeId] => 702368011
                                                [Name] => Snore Reducing Aids
                                                [Ancestors] => SimpleXMLElement Object
                                                    (
                                                        [BrowseNode] => SimpleXMLElement Object
                                                            (
                                                                [BrowseNodeId] => 3764271
                                                                [Name] => Sleep & Snoring
                                                                [Ancestors] => SimpleXMLElement Object
                                                                    (
                                                                        [BrowseNode] => SimpleXMLElement Object
                                                                            (
                                                                                [BrowseNodeId] => 3760941
                                                                                [Name] => Health Care
                                                                                [Ancestors] => SimpleXMLElement Object
                                                                                    (
                                                                                        [BrowseNode] => SimpleXMLElement Object
                                                                                            (
                                                                                                [BrowseNodeId] => 3760931
                                                                                                [Name] => Products
                                                                                                [IsCategoryRoot] => 1
                                                                                                [Ancestors] => SimpleXMLElement Object
                                                                                                    (
                                                                                                        [BrowseNode] => SimpleXMLElement Object
                                                                                                            (
                                                                                                                [BrowseNodeId] => 3760901
                                                                                                                [Name] => Health & Personal Care
                                                                                                            )

                                                                                                    )

                                                                                            )

                                                                                    )

                                                                            )

                                                                    )

                                                            )

                                                    )

                                            )

                                    )

                            )

                    )

            )

    )

)

どういうわけか、カテゴリとサブカテゴリの情報を含む配列の最初のレベルのすべてのアイテムを確実にループする必要があります。

配列にさらにレベル[1]、[2]などがある場合は、それらをスキップする必要があります。

必要な情報は常に最初のレベル->名前、次に最後のレベル->名前にあります。ここでiscategoryroot => 1

しかし、深さは常に異なるので、私はそれを行う方法を単に理解することはできません:(

この状況で私は何ができますか?このような配列をループするにはどうすればよいですか?

ありがとう !:)


編集:


そこで、curlを使用してAPIに接続し、そこからsimplexmlオブジェクトを作成します。

/* include stuff */
include("amazon_api_class.php");
include("functions.php");

// create new amazon object
$obj = new AmazonProductAPI();

try 
    {
        $result = $obj->getItemByAsin("B004NPND20,B004VRJ3E2,B000EM91FY,B00004Z2HD,B00004Z2HR,B00004Z2HZ,B00002ND60,B000N54BDO,B000BQKBCK,B0000225IO");


    } catch(Exception $e) 
    {
        echo $e->getMessage();
    }


// loop over the returned object and extract the details we need
foreach($result->Items->Item as $key => $item){

次に、ブラウズノード配列の完全な出力は次のようになります(ただし、常に異なります)

[BrowseNodes] => SimpleXMLElement Object
    (
        [BrowseNode] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [BrowseNodeId] => 172659
                        [Name] => Televisions
                        [Ancestors] => SimpleXMLElement Object
                            (
                                [BrowseNode] => SimpleXMLElement Object
                                    (
                                        [BrowseNodeId] => 1266092011
                                        [Name] => Television & Video
                                        [Ancestors] => SimpleXMLElement Object
                                            (
                                                [BrowseNode] => SimpleXMLElement Object
                                                    (
                                                        [BrowseNodeId] => 493964
                                                        [Name] => Categories
                                                        [IsCategoryRoot] => 1
                                                        [Ancestors] => SimpleXMLElement Object
                                                            (
                                                                [BrowseNode] => SimpleXMLElement Object
                                                                    (
                                                                        [BrowseNodeId] => 172282
                                                                        [Name] => Electronics
                                                                    )

                                                            )

                                                    )

                                            )

                                    )

                            )

                    )

                [1] => SimpleXMLElement Object
                    (
                        [BrowseNodeId] => 13900851
                        [Name] => Electronics Features
                        [Children] => SimpleXMLElement Object
                            (
                                [BrowseNode] => Array
                                    (
                                        [0] => SimpleXMLElement Object
                                            (
                                                [BrowseNodeId] => 51549011
                                                [Name] => Featured Categories
                                            )

                                        [1] => SimpleXMLElement Object
                                            (
                                                [BrowseNodeId] => 3302711
                                                [Name] => Gold Merchants
                                            )

                                        [2] => SimpleXMLElement Object
                                            (
                                                [BrowseNodeId] => 2354568011
                                                [Name] => Specialty Boutique
                                            )

                                    )

                            )

                        [Ancestors] => SimpleXMLElement Object
                            (
                                [BrowseNode] => SimpleXMLElement Object
                                    (
                                        [BrowseNodeId] => 172282
                                        [Name] => Electronics
                                    )

                            )

                    )

                [2] => SimpleXMLElement Object
                    (
                        [BrowseNodeId] => 1288264011
                        [Name] => All product
                        [Ancestors] => SimpleXMLElement Object
                            (
                                [BrowseNode] => SimpleXMLElement Object
                                    (
                                        [BrowseNodeId] => 1267878011
                                        [Name] => Products
                                        [IsCategoryRoot] => 1
                                        [Ancestors] => SimpleXMLElement Object
                                            (
                                                [BrowseNode] => SimpleXMLElement Object
                                                    (
                                                        [BrowseNodeId] => 1267877011
                                                    )

                                            )

                                    )

                            )

                    )

                [3] => SimpleXMLElement Object
                    (
                        [BrowseNodeId] => 3545110011
                        [Name] => Home Entertainment
                        [Children] => SimpleXMLElement Object
                            (
                                [BrowseNode] => Array
                                    (
                                        [0] => SimpleXMLElement Object
                                            (
                                                [BrowseNodeId] => 3547652011
                                                [Name] => Blu-Ray Players
                                            )

                                        [1] => SimpleXMLElement Object
                                            (
                                                [BrowseNodeId] => 3547650011
                                                [Name] => DVD Players
                                            )

                                        [2] => SimpleXMLElement Object
                                            (
                                                [BrowseNodeId] => 1294446011
                                                [Name] => Televisions
                                            )

                                    )

                            )

                        [Ancestors] => SimpleXMLElement Object
                            (
                                [BrowseNode] => SimpleXMLElement Object
                                    (
                                        [BrowseNodeId] => 1294447011
                                        [Name] => Electronics
                                        [Ancestors] => SimpleXMLElement Object
                                            (
                                                [BrowseNode] => SimpleXMLElement Object
                                                    (
                                                        [BrowseNodeId] => 1267878011
                                                        [Name] => Products
                                                        [IsCategoryRoot] => 1
                                                        [Ancestors] => SimpleXMLElement Object
                                                            (
                                                                [BrowseNode] => SimpleXMLElement Object
                                                                    (
                                                                        [BrowseNodeId] => 1267877011
                                                                    )

                                                            )

                                                    )

                                            )

                                    )

                            )

                    )

                [4] => SimpleXMLElement Object
                    (
                        [BrowseNodeId] => 1293318011
                        [Name] => TVs
                        [Ancestors] => SimpleXMLElement Object
                            (
                                [BrowseNode] => SimpleXMLElement Object
                                    (
                                        [BrowseNodeId] => 1267879011
                                        [Name] => Special Features
                                        [Ancestors] => SimpleXMLElement Object
                                            (
                                                [BrowseNode] => SimpleXMLElement Object
                                                    (
                                                        [BrowseNodeId] => 1267877011
                                                    )

                                            )

                                    )

                            )

                    )

                [5] => SimpleXMLElement Object
                    (
                        [BrowseNodeId] => 1293319011
                        [Name] => Electronics
                        [Ancestors] => SimpleXMLElement Object
                            (
                                [BrowseNode] => SimpleXMLElement Object
                                    (
                                        [BrowseNodeId] => 1267879011
                                        [Name] => Special Features
                                        [Ancestors] => SimpleXMLElement Object
                                            (
                                                [BrowseNode] => SimpleXMLElement Object
                                                    (
                                                        [BrowseNodeId] => 1267877011
                                                    )

                                            )

                                    )

                            )

                    )

            )

    )

)

そして、私は常に最初の配列キーと、そこにある最初と最後のサブアイテムだけが必要です

4

1 に答える 1

5

私がそれを正しく理解したかどうかはわかりませんが、おそらくここからアイデアを取り入れることができます。

function getCategory($node) {
    $category = array();
    $category["Category"] = (string)$node->Name;

    if (isset($node->Ancestors)) {
        do {
            $node = $node->Ancestors->BrowseNode;
            if (isset($node->IsCategoryRoot) && isset($node->Ancestors)) {
                $category["Root"] = (string)$node->Ancestors->BrowseNode->Name;
                break;
            }
        } while (isset($node->Ancestors));
    }

    return $category;
}

再帰関数でもこれを簡単に行うことができますが、より読みやすいループであると思います。(そして効率的でもあります)。

于 2012-03-17T05:28:52.100 に答える