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