有人可以帮助我一些代码或指导如何递归地走一个数组,并在到达最后一个元素时打印它的完整路径?一个简单的回声将起作用,因为我将使代码适应我正在开发的一些其他功能。递归地走数组并打印走的路径
该函数不需要计算阵列方向,因为这PARAM将被传递:
实施例:
$depth = 8;
$array[1][3][5][6][9][5][8][9];
当功能reachs其打印到它所有的路径的第八元件:
//print path
'1 -> 3 -> 5 -> 6 -> 9 -> 5 -> 8 -> 9'
正如我所说的,只有在这个幅面打印将工作的原因我会将代码实施到其他功能中。
数组键可以具有相同的值。显然,在整个文学作品的同一个序列中价值不同。
更新时间:
步行递归函数:
$someArray[1][2][3] = 'end';
$someArray[1][2][6] = 'end';
$someArray[1][3][6] = 'end';
$someArray[4][3][7] = 'end';
function listArrayRecursive(&$array_name, $ident = 0){
if (is_array($array_name)){
foreach ($array_name as $k => &$v){
if (is_array($v)){
for ($i=0; $i < $ident * 10; $i++){ echo " "; }
echo $k . " : " . "<br>";
listArrayRecursive($v, $ident + 1);
}else{
for ($i=0; $i < $ident * 10; $i++){ echo " "; }
echo $k . " : " . $v . "<br>";
}
}
}else{
echo "Variable = " . $array_name;
}
}
listArrayRecursive($someArray);
会打印:
1 :
2 :
3 : end
6 : end
3 :
6 : end
4 :
3 :
7 : end
现在,我怎么也打印阵列的路径每次它到达最后?例如:
1 :
2 :
3 : end : path -> 1,2,3
6 : end : path -> 1,2,6
3 :
6 : end : path -> 1,3,6
4 :
3 :
7 : end : path -> 4,3,7
编辑的代码添加第三个参数去记录路径:
$someArray[1][2][3] = 'end';
$someArray[1][2][6] = 'end';
$someArray[1][3][6] = 'end';
$someArray[4][3][7] = 'end';
$someArray[3][2] = 'end';
function listArrayRecursive(&$array_name, $ident = 0, $path = null){
foreach ($array_name as $k => &$v){
if (is_array($v)){
for ($i=0; $i < $ident * 10; $i++){ echo " "; }
echo $k . " : " . "<br>";
$path .= $k . ', ';
listArrayRecursive($v, $ident + 1, $path);
}else{
for ($i=0; $i < $ident * 10; $i++){ echo " "; }
echo $k . " : " . $v . ' - path -> ' . $path . "<br>";
}
}
}
listArrayRecursive($someArray);
会打印:
1 :
2 :
3 : end - path -> 1, 2,
6 : end - path -> 1, 2,
3 :
6 : end - path -> 1, 2, 3,
4 :
3 :
7 : end - path -> 1, 4, 3,
3 :
2 : end - path -> 1, 4, 3,
嗯,这是基本任务与递归来解决。你有什么尝试? – zerkms
@zerkms其实我有这个代码为递归http://codepad.org/iyrcdfQP但Im卡在零件跟踪到当前$键的路径。 – Henrique
你可以给出一个更清晰的例子,在任何给定的数组深度内的多个项目,或者如果该数组嵌套深'深度'?这解决了什么问题? – salathe