不使用foreach递归遍历多维数组
Posted
技术标签:
【中文标题】不使用foreach递归遍历多维数组【英文标题】:Traverse multi dimensional array recursively without using foreach 【发布时间】:2012-07-17 07:45:45 【问题描述】:我有一个这样的数组和使用 foreach 循环的代码。
$arr = array( array ( array( 'CAR_TIR', 'Tires', 100 ),
array( 'CAR_OIL', 'Oil', 10 ),
array( 'CAR_SPK', 'Spark Plugs', 4 )
),
array ( array( 'VAN_TIR', 'Tires', 120 ),
array( 'VAN_OIL', 'Oil', 12 ),
array( 'VAN_SPK', 'Spark Plugs', 5 )
),
array ( array( 'TRK_TIR', 'Tires', 150 ),
array( 'TRK_OIL', 'Oil', 15 ),
array( 'TRK_SPK', 'Spark Plugs', 6 )
)
);
function recarray($array)
foreach($array as $key=>$value)
if(is_array($value))
RecArray($value);
else
echo "key = $key value = $value";
recarray($arr);
我必须使用递归而不使用 foreach 来遍历数组。
【问题讨论】:
without using foreach
- 为什么? foreach
是一个善良温柔的情人……这对我来说是家庭作业的味道,如果是,请标记它。
是的,它是一种家庭作业。非常感谢
此外,当您并不真正需要从数组的每个位置获取所有值,或者您只想从子数组中删除项目时,使用 foreach 遍历数组并不节省资源。
【参考方案1】:
array_walk_recursive() 呢?它可以对数组的每个元素应用函数:
function test_print($value, $key)
echo "key = $key value = $value";
array_walk_recursive($arr, 'test_print');
未测试
【讨论】:
【参考方案2】:我会使用一个while循环——比如
while($i < count($array))
【讨论】:
php 中没有.length
属性【参考方案3】:
简单的深度优先搜索:
function DFS($array)
for ($i = 0; $i < count($array); $i ++)
if (is_array($array[$i]))
DFS($array[$i]);
else
echo "key: ".$i.", value: ".$array[$i]."<br />";
【讨论】:
仅供参考:for($i = 0; $i以上是关于不使用foreach递归遍历多维数组的主要内容,如果未能解决你的问题,请参考以下文章