Я пытаюсь перебрать массив browsenodes, который возвращает API продукта Amazon для запрошенного продукта с ItemLookup, но я не могу понять, как это сделать надежно, поскольку возвращаемый массив всегда имеет разное количество уровней.
Я искал здесь другие ответы, которые предлагают, например, итератор 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] и т. д., их нужно будет пропустить.
Информация, которая мне нужна, всегда находится на первом уровне-> имяа затем последний уровень-> name, где iscategoryroot => 1
Но так как глубина всегда различна, я просто не могу понять, как это сделать: (
Что можетЯ делаю в этой ситуации?Как бы я зациклился на таких массивах?
Спасибо!:)
РЕДАКТИРОВАТЬ:
Итак, я подключаю к API с помощью curl, и строю из него объект 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
)
)
)
)
)
)
)
)
И мне всегда нужен только первый ключ массива, а затем первый и последний подпункт там