1

我正在通过 Amazon API 访问产品详细信息,并在我的数据数组中获取此信息:

["BrowseNodes"]=>
      array(1) {
        ["BrowseNode"]=>
        array(3) {
          [0]=>
          array(3) {
            ["BrowseNodeId"]=>
            string(10) "7421468011"
            ["Name"]=>
            string(24) "Educational & Nonfiction"
            ["Ancestors"]=>
            array(1) {
              ["BrowseNode"]=>
              array(3) {
                ["BrowseNodeId"]=>
                string(4) "4390"
                ["Name"]=>
                string(14) "Graphic Novels"
                ["Ancestors"]=>
                array(1) {
                  ["BrowseNode"]=>
                  array(3) {
                    ["BrowseNodeId"]=>
                    string(4) "4366"
                    ["Name"]=>
                    string(23) "Comics & Graphic Novels"
                    ["Ancestors"]=>
                    array(1) {
                      ["BrowseNode"]=>
                      array(4) {
                        ["BrowseNodeId"]=>
                        string(4) "1000"
                        ["Name"]=>
                        string(8) "Subjects"
                        ["IsCategoryRoot"]=>
                        bool(true)
                        ["Ancestors"]=>
                        array(1) {
                          ["BrowseNode"]=>
                          array(2) {
                            ["BrowseNodeId"]=>
                            string(6) "283155"
                            ["Name"]=>
                            string(5) "Books"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          [1]=>
          array(3) {
            ["BrowseNodeId"]=>
            string(5) "13871"
            ["Name"]=>
            string(20) "History & Philosophy"
            ["Ancestors"]=>
            array(1) {
              ["BrowseNode"]=>
              array(3) {
                ["BrowseNodeId"]=>
                string(2) "75"
                ["Name"]=>
                string(14) "Science & Math"
                ["Ancestors"]=>
                array(1) {
                  ["BrowseNode"]=>
                  array(4) {
                    ["BrowseNodeId"]=>
                    string(4) "1000"
                    ["Name"]=>
                    string(8) "Subjects"
                    ["IsCategoryRoot"]=>
                    bool(true)
                    ["Ancestors"]=>
                    array(1) {
                      ["BrowseNode"]=>
                      array(2) {
                        ["BrowseNodeId"]=>
                        string(6) "283155"
                        ["Name"]=>
                        string(5) "Books"
                      }
                    }
                  }
                }
              }
            }
          }
          [2]=>
          array(3) {
            ["BrowseNodeId"]=>
            string(5) "11256"
            ["Name"]=>
            string(20) "Folklore & Mythology"
            ["Ancestors"]=>
            array(1) {
              ["BrowseNode"]=>
              array(3) {
                ["BrowseNodeId"]=>
                string(5) "11232"
                ["Name"]=>
                string(15) "Social Sciences"
                ["Ancestors"]=>
                array(1) {
                  ["BrowseNode"]=>
                  array(3) {
                    ["BrowseNodeId"]=>
                    string(10) "3377866011"
                    ["Name"]=>
                    string(26) "Politics & Social Sciences"
                    ["Ancestors"]=>
                    array(1) {
                      ["BrowseNode"]=>
                      array(4) {
                        ["BrowseNodeId"]=>
                        string(4) "1000"
                        ["Name"]=>
                        string(8) "Subjects"
                        ["IsCategoryRoot"]=>
                        bool(true)
                        ["Ancestors"]=>
                        array(1) {
                          ["BrowseNode"]=>
                          array(2) {
                            ["BrowseNodeId"]=>
                            string(6) "283155"
                            ["Name"]=>
                            string(5) "Books"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
         </pre>

关键是我需要在这个例子中提取价值“政治与社会科学”,深度并不总是相同的。然而,每个数组从头到尾都是一样的 - 书籍 -> 主题 -> 政治与社会科学

由于我通过脚本运行了数百本书,因此我需要自动化的方式来从底部获得第三级。它始终是数组末尾的第 3 级。

4

1 回答 1

1

我制作了这些功能,您可以使用这些功能从最后找到第三个“主题”。但我认为有比使用递归更好的方法(像我一样):

function isItEnd($array){
    return !array_key_exists('Ancestors', $array);
}

function getThirdFromEnd($category){
    if(!isItEnd($category)){
    $away_from_parent = getThirdFromEnd($category['ancestors']['BrowseNode']);
    if($away_from_parent == 0){
        $away_from_parent = $category['ancestors']['BrowseNode'];
    } else {
        $away_from_parent--;
    }
} else {
    $away_from_parent = 2;
}
return $away_from_parent;
}

它递归地获取类别并更深入,直到 isItEnd 函数返回 true (到达数组的末尾),然后通过数字计数它从末尾返回第三个父对象

你可以像这样使用它:

$thirds = array();
foreach($browseNodes['BrowseNodes']['BrowseNode'] as $category){
     $thirds[] = getThirdFromEnd($category);
}
print_r($thirds);

工作演示: https ://3v4l.org/SeKvM

希望这会有所帮助,但首先将数组解析为二维(存储“父母”)然后查找特定的 ID 或名称不是更好吗?

于 2016-04-29T11:04:45.990 回答