如何使用 PHP 为递归函数 return 数组?
How to return array for a recursive function using PHP?
我有一个这样的多维数组:
<pre>Array
(
[0] => Array
(
[id] => 52a83521-0914-4264-8fd9-07d9c601692a
[role_id] => 2
[children] => Array
(
[0] => Array
(
[id] => 54c1f5e4-b52c-4e17-b1bf-1f4616091b4e
[role_id] => 8
[children] => Array
(
[0] => Array
(
[id] => 54c20aba-201c-40ce-b3df-22d516091b4e
[role_id] => 9
)
[1] => Array
(
[id] => 54c20f4b-6e44-40ec-ae22-223a16091b4e
[role_id] => 9
)
)
)
[1] => Array
(
[id] => 54c1f8bb-ebac-466b-a83f-13a416091b4e
[role_id] => 8
)
)
)
)
</pre>
我需要从这个数组中按顺序填充所有 role_id。我尝试使用这样的递归函数:
<?php
public function tree_check($tree){
$tree_keys = $this->_recursion($tree);
print_r($tree_keys);
}
public function _recursion($tree){
foreach ($tree as $n => $v)
{
if(isset($v['role_id'])){
$key_arr[] = $v['role_id'];
}
if (is_array($v))
$this->_recursion($v);
}
return $key_arr;
}
我期待以下输出:
<pre>
Array(
[0]=>2,
[1]=>8,
[2]=>9,
[3]=>9,
[4]=>8
)
</pre>
在这里,我无法达到预期的输出。数组的级别可能会动态变化,这就是为什么我用递归函数来完成它。
我应该如何return递归函数的数组?
既然我不知道我的数组有多深,我怎么能找到数组的最后一个键值对呢?
您可以使用 RecursiveIteratorIterator:
遍历元素
function listRolesRecursive($myArray) {
$res = array();
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($myArray), RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $k => $v) {
if($k === "role_id") {
$res[] = $v;
}
}
return $res;
}
$res = listRolesRecursive($arr);
var_dump($res);
它应该可以解决问题。
我有一个这样的多维数组:
<pre>Array
(
[0] => Array
(
[id] => 52a83521-0914-4264-8fd9-07d9c601692a
[role_id] => 2
[children] => Array
(
[0] => Array
(
[id] => 54c1f5e4-b52c-4e17-b1bf-1f4616091b4e
[role_id] => 8
[children] => Array
(
[0] => Array
(
[id] => 54c20aba-201c-40ce-b3df-22d516091b4e
[role_id] => 9
)
[1] => Array
(
[id] => 54c20f4b-6e44-40ec-ae22-223a16091b4e
[role_id] => 9
)
)
)
[1] => Array
(
[id] => 54c1f8bb-ebac-466b-a83f-13a416091b4e
[role_id] => 8
)
)
)
)
</pre>
我需要从这个数组中按顺序填充所有 role_id。我尝试使用这样的递归函数:
<?php
public function tree_check($tree){
$tree_keys = $this->_recursion($tree);
print_r($tree_keys);
}
public function _recursion($tree){
foreach ($tree as $n => $v)
{
if(isset($v['role_id'])){
$key_arr[] = $v['role_id'];
}
if (is_array($v))
$this->_recursion($v);
}
return $key_arr;
}
我期待以下输出:
<pre>
Array(
[0]=>2,
[1]=>8,
[2]=>9,
[3]=>9,
[4]=>8
)
</pre>
在这里,我无法达到预期的输出。数组的级别可能会动态变化,这就是为什么我用递归函数来完成它。
我应该如何return递归函数的数组?
既然我不知道我的数组有多深,我怎么能找到数组的最后一个键值对呢?
您可以使用 RecursiveIteratorIterator:
遍历元素function listRolesRecursive($myArray) {
$res = array();
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($myArray), RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $k => $v) {
if($k === "role_id") {
$res[] = $v;
}
}
return $res;
}
$res = listRolesRecursive($arr);
var_dump($res);
它应该可以解决问题。