1
我知道这个问题是更多的数据结构,但由于我在Symfony中做这件事,可能会有一个更简单的方法。我有一个递归函数treeBuilder()我想调用一些数据来创建一个层次结构。说一个人的数据库,如果他们和父母住在一起,我想创建一个树形结构。我知道我将一个对象数组传递给函数,但它需要是一个数组。我很确定我需要重写这个函数,以便它处理对象的数组,但难倒了。我不知道如何访问数组的元素来检查文件。我知道下面的代码是不正确的,但那是我现在的位置。从数组数组中的对象检索数据
控制器:
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('CompanyMyBundle:Org')->findAll();
var_dump($entities);
$tree=$this->treeBuilder($entities);
return array(
'entities' => $tree,
);
}
private function treeBuilder($ar, $pid=null)
{
$op=array();
foreach($ar as $item) {
// I know I have an array of objects
if($item['ParentId'] == $pid) {
$op[$item['Id']] = array(
'Street' => $item['Street'],
'ParentId' => $item['ParentId']
);
$children = self::treeBuilder($ar, $item['Id']);
if($children) {
$op[$item['Id']]['children'] = $children;
}
}
}
return $op;
}
的var_dump从的indexAction($实体)():
/export/www/working/symfony/src/Company/MyBundle/Controller/DepController.php:34:
array (size=60)
0 =>
object(Company\MyBundle\Entity\Org)[1556]
private 'Name' => string 'Me' (length=46)
private 'Street' => string '123 Sesame' (length=255)
private 'City' => string 'Myhometown' (length=255)
private 'ParentId' => int 0
private 'Id' => int 1
1 =>
object(Company\MyBundle\Entity\Org)[1557]
private 'Name' => string 'Me2' (length=46)
private 'Street' => string '123 Sesame' (length=255)
private 'City' => string 'Myhometown' (length=255)
private 'ParentId' => int 1
private 'Id' => int 2
是的,您的建议是我正在寻找的。我感到非常愚蠢,我太专注于使用变量而不是setter/getters,而我的phpstorm由于某种原因没有意识到这些方法,但他们工作得很好。 – shayster01