このRecursive Functionを使用して、PHP配列を親と子の配列に変換したいと考えています。Cakephp3ビューセルで再帰関数を使用する
私は、このセルがあります。
class MenuCell extends Cell {
public function display($menu) {
$this->loadModel('Menus');
$menus = $this -> Menus -> find('all', [
'contain' => ['MenuItems']
]) -> where(['id' => $menu]);
$menus = $this -> buildTree($menus);
$this -> set(compact('menus'));
$this -> set('_serialize', ['menus']);
}
public function buildTree($ar, $pid = null) {
$op = array();
foreach($ar as $item) {
if ($item['parentId'] == $pid) {
$op[$item['id']] = array(
'name' => $item['name'],
'parentId' => $item['parentId']
);
// using recursion
$children = $this ->buildTree($ar, $item['id']);
if ($children) {
$op[$item['id']]['children'] = $children;
}
}
}
return $op;
}
}
をしかし、それは私にこのエラー与える:私は、コントローラでsamethingをすれば、それは非常にうまく動作しますが
を。 私の一日を助ける助けがあれば。
あなたが最初にこのような問題をデバッグする必要があり、このような質問をする前に!関連するメモで、なぜあなたは[** 'find( 'threaded')' **](http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets)を使わないでください。 html#finding-threaded-data)? – ndm
私はモデルからスレッドを見つける必要はありません。私は配列内のすべてを見つけて、その配列に対して操作を実行したい。 申し訳ありませんが私はそれらのエラーを参照してください。私は次回に気をつけます –
@ManjeetBarnalaこれは最高のひどい貧弱なハックであり、明らかに**解決策ではありません。 1000 - それは16分です。私はユーザーがずっと前に去ってしまったと確信しています。またはあなたのshittyコードがメモリ制限を吹き飛ばすか、別のエラーが発生します。 ***症状を修正してください、症状ではありません!*** – burzum