php - 不递归打印数据

标签 php algorithm recursion

其实没什么好问的。我想要打印数组,但不使用递归。原因是程序有一个错误,因为它的数据太多,必须重写旧功能。该函数称为递归函数,多次调用后我的脚本无法分配更多内存,因此我的示例数组为:

array (
  0 => 
  array (
    'id' => '5713008',
    'children' => 
    array (
      0 => 
      array (
        0 => 
        array (
          'id' => '13',
          'children' => 
          array (
            'id' => '20',
            'children' => 
            array (
              0 => 
              array (
                'id' => '120',
              ),
              1 => 
              array (
                'id' => '464',
              ),
            ),
          ),
        ),
        1 => 
        array (
          0 => 
          array (
            'id' => '21',
          ),
        ),
      ),
      1 => 
      array (
        'id' => '143',
        'children' => 
        array (
          1 => 
          array (
            'id' => '60011',
          ),
          2 => 
          array (
            'id' => '60012',
          ),
          3 => 
          array (
            'id' => '5299316',
          ),
          4 => 
          array (
            'id' => '5712901',
          ),
          5 => 
          array (
            'id' => '147',
          ),
          6 => 
          array (
            'id' => '148',
          ),
          7 => 
          array (
            'id' => '149',
          ),
          8 => 
          array (
            'id' => '60010',
          ),
        ),
      ),
    ),
  ),
)

我需要这样的数据:

id: 5713008
--------------
>>id: 13
--------------
>>>>id: 20
--------------
>>>>>>>>id: 120
--------------
>>>>>>>>id: 464
--------------
>>>>id: 21
--------------
>>id: 143
--------------
>>>>id: 60011
--------------
>>>>id: 60012
--------------
>>>>id: 5299316
--------------
>>>>id: 5712901
--------------
>>>>id: 147
--------------
>>>>id: 148
--------------
>>>>id: 149
--------------
>>>>id: 60010
--------------

最佳答案

function myVarDump($item, $recursion = 0)
{
  if(is_array($item))
    foreach($item as $key => $value)
    {
      if(is_array($value))
        myVarDump($value, $recursion+1);     
      else
        echo str_repeat('>', $recursion)."$key: $value\n--------------\n";
    }
  else echo($item);
}

此函数将根据您的请求输出数据,但显然您仍然需要递归才能显示嵌套项。因此,我不完全理解您要解决的问题——也许您需要限制递归?如果是这样,只需在该函数中限制 $recursion 的高度即可,例如:

function myVarDump($item, $recursion = 0, $maxRecursion = 5)
{
  if($recursion > $maxRecursion)
    echo str_repeat('>>', $recursion)."ERROR: Max recursion $maxRecursion exceeded";
  elseif(is_array($item))
    foreach($item as $key => $value)
    {
      if(is_array($value))
        myVarDump($value, $recursion+1);     
      else
        echo str_repeat('>', $recursion)."$key: $value\n--------------\n";
    }
  else echo($item);
}

关于php - 不递归打印数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24867479/

相关文章:

sql - 递归查询中不允许使用聚合函数。是否有其他方法来编写此查询?

algorithm - 这个算法的 Big-O 和运行时间,如何将其转换为迭代算法

php - 如何将用户特定数据从外部数据库调用到 WordPress

php - 为什么使用动态/松散类型语言的接口(interface)?

r - 查找 DAG 中节点值的累积和

javascript - 从另一个数组更新对象数组

java - 通过递归函数进行跟踪

javascript - 如何使用 Blogger 帖子图片作为背景图片?

javascript - JS Autocomplete - 访问标签值

performance - 排序算法的内存速度权衡