Ai đó có thể giúp tôi với một số mã hoặc hướng dẫn về cách đi bộ đệ quy một mảng và khi đến phần tử cuối cùng in đường dẫn đầy đủ đến nó? Một tiếng vang đơn giản sẽ hoạt động vì tôi sẽ điều chỉnh mã cho một số chức năng khác mà tôi đang phát triển.Đi bộ mảng đệ quy và in đường đi bộ
Chức năng không cần phải tìm kích thước mảng vì param này sẽ được thông qua:
Ví dụ:
$depth = 8;
$array[1][3][5][6][9][5][8][9];
Khi chức năng đạt từ yếu tố thứ 8 nó in tất cả các đường dẫn đến nó:
//print path
'1 -> 3 -> 5 -> 6 -> 9 -> 5 -> 8 -> 9'
Như tôi đã nói, chỉ in ở định dạng này sẽ làm việc vì tôi sẽ triển khai mã vào một số hàm khác.
các khóa mảng có thể có cùng giá trị. Rõ ràng không phải là cùng một giá trị trong cùng một chuỗi cho toàn bộ arary.
Cập nhật:
Walk đệ quy chức năng:
$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);
Sẽ in:
1 :
2 :
3 : end
6 : end
3 :
6 : end
4 :
3 :
7 : end
Bây giờ, làm thế nào tôi có thể cũng in các con đường của mảng mọi lúc nó đến cuối? Ví dụ:
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
EDITED MÃ BỔ SUNG MỘT PARAM BA để ghi lại các PATH:
$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);
Sẽ in:
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,
Vâng, đó là nhiệm vụ cơ bản để giải quyết với đệ quy. Bạn đã thử cái gì? – zerkms
@zerkms thực sự tôi có mã này cho đệ quy http://codepad.org/iyrcdfQP nhưng Im bị mắc kẹt trên một phần để theo dõi đường dẫn đến khóa $ hiện tại. – Henrique
Bạn có thể đưa ra một ví dụ rõ ràng hơn, những gì của nhiều mục trong bất kỳ độ sâu nhất định của mảng hoặc nếu mảng không được lồng sâu sâu như '$ depth'? Vấn đề gì là giải quyết này? – salathe