0

嗨,我有递归函数,可以生成二叉树数组,所以从那

array(
array(
   'name' => 'John',
   'id' => 1,
   'mother_id' => 2,
   'father_id' => 3
),
array(
   'name' => 'Lucy',
   'id' => 2,
   'mother_id' => 5,
   'father_id' => 4
),
array(
   'name' => 'Jim',
   'id' => 3,
   'mother_id' => 7,
   'father_id' => 9
),
array(
   'name' => 'Paul',
   'id' => 4,
   'mother_id' => 534,
   'father_id' => 54
),
array(
   'name' => 'Laura',
   'id' => 5,
   'mother_id' => 554,
   'father_id' => 51
),
array(
   'name' => 'Vanessa',
   'id' => 7,
   'mother_id' => 5354,
   'father_id' => 514
),
array(
   'name' => 'Adam',
   'id' => 9,
   'mother_id' => 245354,
   'father_id' => 514234
),
);

我明白了:

array(
 array(
'person' => array(
    'name' => 'John',
    'id' => 1,
    'mother_id' => 2,
    'father_id' => 3
),
'parents' => array(
    'mother' => array(
          'person' => array(
              'name' => 'Lucy',
              'id' => 2,
              'mother_id' => 5,
              'father_id' => 4
          ),
          'parents' => array(
              'mother' => array(
                  'person' => array(
                      'name' => 'Laura',
                      'id' => 5,
                      'mother_id' => 554,
                      'father_id' => 51
                  ),
                  'parents' => array(...)
              ),
              'father' => array(
                    'person' => array(
                        'name' => 'Paul',
                        'id' => 4,
                        'mother_id' => 534,
                        'father_id' => 54
                    ),
                    'parents' => array(...)
               ), 
          )
    ),
    'father' => ...
 )

它工作得很好,直到它得到超过-+100个值的数组,当它得到这个数组时,它返回500错误,这对我来说似乎很奇怪,因为显然我没有无限循环或类似的东西,因为最小的数组解析得很好,但我不知道这种行为的原因是什么。

function parseTree(&$tree, $root = null)
{
$return = null;
foreach ($tree as $key => $item) {
    if ($root == null || $item['id'] == $root) {
        $return = [
            'person' => $item,
            'parents' => [
                'father' => parseTree($tree, $item['father_id']),
                'mother' => parseTree($tree, $item['mother_id'])
            ]
        ];
        unset ($tree[$key]);
    }
}
return $return;
 }
4

0 回答 0