Để tạo chức năng đệ quy với đầu ra, bạn cần ba điều:
- Một biến hoặc tham số để giữ vị trí hiện tại, đó là
$r
trong mã của bạn. Bạn có cái này đúng. - Một biến hoặc một tham số giữ kết quả mà bạn không có. Lúc đầu, nó dường như là
$bread
, nhưng nó không giữ bất kỳ giá trị nào vì nó trống mỗi khi bạn gọirecursive[]
. Một giải pháp đơn giản là tuyên bố nó làglobal
bên trong hàm. - Một tuyên bố
if
kiểm tra điều kiện dừng mà bạn không có. Thay vào đó, bạn có một vòng lặpdo-while
trong mã của bạn.
Vì vậy, bạn có hai sai lầm ở đó. Dựa trên mã của bạn và sửa đổi nó càng ít càng tốt, đây là mã chính xác:
$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
$bread = array[];
function recursive[$r]
{
global $bread;
$bread[] = strval[$r->BrowseNodeId];
if[isset[$r->Ancestors]]{
return recursive[$r->Ancestors->BrowseNode];
}else{
return array_reverse[$bread];
}
}
print_r[recursive[$rec]];
Có bạn đi.
Cập nhật: Tôi đồng ý với @flamestorm, global
nên tránh nếu có thể. Thay vào đó, tôi cũng nhận được đề xuất sử dụng ____1010, nhưng nó giới thiệu một lỗi. Vì vậy, tôi khuyên bạn nên tránh
0 nếu bạn không chắc chắn cách sử dụng nó. I agree with @FlameStorm, $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
global
should be avoided if possible. I also received suggestion to use
$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
0 instead, but it introduces a bug. Thus, I recommend avoiding $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
0 as
well if you're not sure how to use it.Đây là mã được cải thiện:
$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
Biến $bread
bên ngoài hàm không còn cần thiết. Ngoài ra, không sử dụng global
hoặc
$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
0. JW ¶
[Php 5, Php 7, Php 8] — Apply a user function recursively to every member of an array
Array_Walk_Recursive - Áp dụng chức năng người dùng đệ quy cho mọi thành viên của một mảng
Sự mô tả[array|object
5,
callable $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
6, mixed $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
7 = $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
8]: bool$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
mảng_walk_recursive [mảng | object $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
5, callable $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
6, hỗn hợp $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
7 = $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
8]: bool
Thông số$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
9 Mảng đầu vào.
a holds apple b holds banana sour holds lemon0
NếuThông thường,
a holds apple b holds banana sour holds lemon0 có hai tham số. Giá trị của tham số9 là giá trị đầu tiên và khóa/chỉ mục thứ hai.:$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode; function recursive[$r] { if[isset[$r->Ancestors]] $bread = recursive[$r->Ancestors->BrowseNode]; $bread[] = strval[$r->BrowseNodeId]; return $bread; } print_r[recursive[$rec]];
Ghi chú:
a holds apple b holds banana sour holds lemon0 cần phải làm việc với các giá trị thực của mảng, hãy chỉ định tham số đầu tiên của
a holds apple b holds banana sour holds lemon0 làm tài liệu tham khảo. Sau đó, bất kỳ thay đổi nào được thực hiện cho các yếu tố đó sẽ được thực hiện trong chính mảng ban đầu.
a holds apple b holds banana sour holds lemon5
Nếu tham số a holds apple
b holds banana
sour holds lemon
5 tùy chọn được cung cấp, nó sẽ được truyền dưới dạng tham số thứ ba cho a holds apple
b holds banana
sour holds lemon
0.
Trả về giá trịa holds apple
b holds banana
sour holds lemon
8 on success or a holds apple
b holds banana
sour holds lemon
9 on failure.
Trả về a holds apple
b holds banana
sour holds lemon
8 khi thành công hoặc a holds apple
b holds banana
sour holds lemon
9 khi thất bại.
Ví dụarray_walk_recursive[] example
$r
0
$r
1
$r
2Ví dụ #1 Array_Walk_Recursive [] Ví dụ
a holds apple b holds banana sour holds lemon
Ví dụ trên sẽ xuất ra:array will not be passed to the function.
Bạn có thể nhận thấy rằng khóa '$r
3' không bao giờ được hiển thị. Bất kỳ khóa nào giữ một mảng sẽ không được chuyển đến hàm.
- Xem thêm
Array_walk [] - Áp dụng chức năng do người dùng cung cấp cho mọi thành viên của một mảng ¶
9 năm trước
$r
4
$r
5
$r
6
$r
7Amoffat tại amoffat dot com ¶ ¶
5 năm trước
$r
8
$r
9
$bread
0
$bread
114 năm trước ¶
4 năm trước
$bread
2
$bread
3
$bread
4
$bread
5JW ¶ ¶
[Php 5, Php 7, Php 8]
$bread
6
$bread
7
$bread
8
$bread
9
recursive[]
0
recursive[]
1
$r
7Array_Walk_Recursive - Áp dụng chức năng người dùng đệ quy cho mọi thành viên của một mảng ¶
Sự mô tả
recursive[]
3
recursive[]
4
$r
7 mảng_walk_recursive [mảng | object
5, callable $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
6, hỗn hợp $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
7 = $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
8]: bool ¶$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
Thông số
recursive[]
6
recursive[]
7
$r
7
9 ¶$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
Mảng đầu vào.
recursive[]
9
global
0
global
1
$r
7 a holds apple
b holds banana
sour holds lemon
0 ¶
Sự mô tả
global
3
global
4
global
5
global
6 mảng_walk_recursive [mảng | object
5, callable $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
6, hỗn hợp $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
7 = $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
8]: bool ¶
$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
5 năm trước
global
7
global
8
global
9
if
0
$r
7Thông số ¶
9$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
if
2
if
3
if
4
if
5Mảng đầu vào. ¶
[Php 5, Php 7, Php 8]
if
6
if
7
global
4
if
9
do-while
0Ẩn danh ¶ ¶
9$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
do-while
1
Mảng đầu vào. ¶
a holds apple
b holds banana
sour holds lemon
0
do-while
2
do-while
3
do-while
4
do-while
5
do-while
6 Thông thường, a holds apple
b holds banana
sour holds lemon
0 có hai tham số. Giá trị của tham số
9 là giá trị đầu tiên và khóa/chỉ mục thứ hai. ¶$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
9 năm trước
do-while
7
do-while
8
$r
7Ghi chú: ¶
Nếu a holds apple
b holds banana
sour holds lemon
0 cần phải làm việc với các giá trị thực của mảng, hãy chỉ định tham số đầu tiên của a holds apple
b holds banana
sour holds lemon
0 làm tài liệu tham khảo. Sau đó, bất kỳ thay đổi nào được thực hiện cho các yếu tố đó sẽ được thực hiện trong chính mảng ban đầu.
global
0
global
1
global
2
global
3
$r
7
a holds apple
b holds banana
sour holds lemon
5 ¶
4 năm trước
global
5
global
6
$r
7SeductiveApps.com ¶
4 năm trước
global
8
global
9
$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
00$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
01$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
02$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
03$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
04$r
7Ẩn danh ¶ ¶
5 năm trước
global
7
global
8
global
9
if
0
$r
7Rodrigo Guariento ¶ ¶
9 năm trước
$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
11$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
12$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
13$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
14$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
15$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
16$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
17$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
18$r
7Amoffat tại amoffat dot com ¶ ¶
14 năm trước
$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
20$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
21$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
22$r
7JW ¶ ¶
14 năm trước
$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
24$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
25$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
26$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
27$rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode;
function recursive[$r]
{
if[isset[$r->Ancestors]]
$bread = recursive[$r->Ancestors->BrowseNode];
$bread[] = strval[$r->BrowseNodeId];
return $bread;
}
print_r[recursive[$rec]];
28$r
7