0

AWS レスポンスからルート カテゴリ名を取得しようとしています。ECS PHP クラスはそれをクラスとして返します。これが XML の場合は、xpath 検索を実行できます。オブジェクトの検索に相当するものを知りません。

以下は、BrowseNode 要素から始まるオブジェクト構造です。

object(stdClass)#172 (1) {
  ["BrowseNode"]=>
  object(stdClass)#173 (3) {
    ["BrowseNodeId"]=>
    string(8) "11059391"
    ["Name"]=>
    string(22) "Makeup Brushes & Tools"
    ["Ancestors"]=>
    object(stdClass)#174 (1) {
      ["BrowseNode"]=>
      object(stdClass)#175 (3) {
        ["BrowseNodeId"]=>
        string(8) "11062741"
        ["Name"]=>
        string(19) "Tools & Accessories"
        ["Ancestors"]=>
        object(stdClass)#176 (1) {
          ["BrowseNode"]=>
          object(stdClass)#177 (4) {
            ["BrowseNodeId"]=>
            string(8) "11055981"
            ["Name"]=>
            string(8) "Products"
            ["IsCategoryRoot"]=>
            bool(true)
            ["Ancestors"]=>
            object(stdClass)#178 (1) {
              ["BrowseNode"]=>
              object(stdClass)#179 (2) {
                ["BrowseNodeId"]=>
                string(7) "3760911"
                ["Name"]=>
                string(6) "Beauty"
              }
            }
          }
        }
      }
    }
  }
}

基本的に、"IsCategoryRoot" が TRUE の場合、次の "Ancestors" 要素の下にある "Name" の値を取得する必要があります。この場合、「Beauty」が値になります。

これどうやってするの?

4

1 に答える 1

0

オブジェクトに再帰してノードを探す関数を簡単に作成できます。

function find_category_root_name (stdClass $node) {
    if(isset($node->IsCategoryRoot) && $node->IsCategoryRoot === true) {
        if(isset($node->Ancestors->BrowseNode->Name) && !empty($node->Ancestors->BrowseNode->Name)) {
            return $node->Ancestors->BrowseNode->Name;
        } else {
            // error IsCategoryRoot found but no name found for ancestor
            return false;
        }
    } else if (isset($node->Ancestors->BrowseNode) && $node->Ancestors->BrowseNode instanceof stdClass) {
        return find_category_root_name($node->Ancestors->BrowseNode);
    } else {
        // error no ancestor node found
        return false;
    }
}

find_category_root_name($outer_object->BrowseNode);
于 2012-12-13T16:49:40.573 に答える