Php 递归循环和嵌套多维数组的问题
我这里有一个嵌套的多维数组:Php 递归循环和嵌套多维数组的问题,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我这里有一个嵌套的多维数组: Array ( [merchant] => Array ( [XML_Serializer_Tag] => Array ( [id] => 736 [name] => Cadbury Gifts Direct ) [prod] => Array (
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
)
随后,分段循环
所以
等等
我需要找到每个数组段的属性名称
所以我使用了这个递归循环:
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;
}
它还收集了顶部嵌套数组:
[XML_Serializer_Tag] => Array
(
[id] => 736
[name] => Cadbury Gifts Direct
)
这只是整个提要的细节,而不是单个片段
我需要一种过滤掉顶部嵌套数组的方法,但请记住,细节是动态的,因此键的名称可以从一个提要更改为下一个提要,可能是这样
$riter = new RecursiveIteratorIterator(New RecursiveArrayIterator($array));
foreach ($riter as $key => $val) {
if ($riter->getDepth() > 1) {
echo "$key => $val\n";
}
}
默认情况下,递归迭代器只访问叶节点(每个路径下最深的级别)。getDepth()可用于确保为最小深度。我不确定1是否是正确的数字,但无论如何…使用
array\u shift
弹出数组的第一个元素是的,如果我将其设置为第二级,它对所有不同类型的数组都有效。我现在需要重新编写上面的函数,因为通过使用此方法,它将删除我用来计数的键(这将输出一长串字符串)
[XML_Serializer_Tag] => Array
(
[id] => 736
[name] => Cadbury Gifts Direct
)
$riter = new RecursiveIteratorIterator(New RecursiveArrayIterator($array));
foreach ($riter as $key => $val) {
if ($riter->getDepth() > 1) {
echo "$key => $val\n";
}
}