使用递归函数的多维数组用于关系数据

时间:2013-12-04 10:24:10

标签: php arrays json

目前我正致力于为类别创建多维数组 - 子类别关系和创建JSON结构。

我从以下网址找到了以下代码:

PHP Create a Multidimensional Array from an array with relational data

function makeRecursive($d, $r = 0, $pk = 'parent', $k = 'id', $c = 'children') {
  $m = array();
  foreach ($d as $e) {
    isset($m[$e[$pk]]) ?: $m[$e[$pk]] = array();
    isset($m[$e[$k]]) ?: $m[$e[$k]] = array();
    $m[$e[$pk]][] = array_merge($e, array($c => &$m[$e[$k]]));
  }

  return $m[$r][0];
}

echo json_encode(makeRecursive(array(
  array('id' => 5273, 'parent' => 0,    'name' => 'John Doe'),  
  array('id' => 6032, 'parent' => 5273, 'name' => 'Sally Smith'),
  array('id' => 6034, 'parent' => 6032, 'name' => 'Mike Jones'),
  array('id' => 6035, 'parent' => 6034, 'name' => 'Jason Williams'),
  array('id' => 6036, 'parent' => 5273, 'name' => 'Sara Johnson'),
  array('id' => 6037, 'parent' => 5273, 'name' => 'Dave Wilson'),
  array('id' => 6038, 'parent' => 6037, 'name' => 'Amy Martin'),
)));

这适用于上面的数组,但它不适用于多个父类别。检查以下数组,它有两个父类别id:5273和5274。

echo json_encode(makeRecursive(array(
      array('id' => 5273, 'parent' => 0,    'name' => 'John Doe'),
      array('id' => 5274, 'parent' => 0,    'name' => 'Kevin smith'),
      array('id' => 5276, 'parent' => 5274, 'name' => 'Ricky martin'),  
      array('id' => 6032, 'parent' => 5273, 'name' => 'Sally Smith'),
      array('id' => 6034, 'parent' => 6032, 'name' => 'Mike Jones'),
      array('id' => 6035, 'parent' => 6034, 'name' => 'Jason Williams'),
      array('id' => 6036, 'parent' => 5273, 'name' => 'Sara Johnson'),
      array('id' => 6037, 'parent' => 5273, 'name' => 'Dave Wilson'),
      array('id' => 6038, 'parent' => 6037, 'name' => 'Amy Martin'),
    )));

有人有解决方案吗?

1 个答案:

答案 0 :(得分:0)

使用的makeRecursive()函数不适用于具有多个根的数据。

你可以解决这个问题,但我认为更有趣的问题是你的原始数据是哪种形式,以及是否有更优雅的方式来完成任务。也许有一种简单的方法可以使用真正的递归函数来实现...