2014-10-01 81 views
0

如何將此遞歸函數轉換爲laravel函數。這裏是錯誤消息如何將此函數轉換爲laravel函數

「array_filter()預計參數1是數組,對象給出」

實際功能

$sql = "SELECT * FROM tasks"; 
$r = mysql_query($sql, $conn); 
$arr = array(); 
while ($row = mysql_fetch_assoc($r)) 
    $arr[] = $row 

function build($arrayIn, $parent) 
{ 
    $makeFilter = function($p) {return function($x) use ($p) {return $x['parent'] == $p;};}; 
    $f = $makeFilter($parent); 
    $these = array_filter($arrayIn, $f); 
    $remaining = array_diff_assoc($arrayIn, $these); 
    $ans = array(); 

    foreach($these as $cur) 
    { 
     $ans[$cur['text']] = build($remaining, $cur['id']); 
    } 
    return $ans ? $ans : null; 
} 

$tree = build($arr, 0) 
echo_r($arr); 
echo "becomes<br />"; 
echo_r($tree); 

我嘗試未工作

$arr = USER::all(); 

function build($arrayIn, $parent) 
{ 
    $makeFilter = function($p) {return function($x) use ($p) {return $x['parent'] == $p;};}; 
    $f = $makeFilter($parent); 
    $these = array_filter($arrayIn, $f); 
    $remaining = array_diff_assoc($arrayIn, $these); 
    $ans = array(); 

    foreach($these as $cur) 
    { 
     $ans[$cur['text']] = build($remaining, $cur['id']); 
    } 
    return $ans ? $ans : null; 
} 

$tree = build($arr, 0) 
echo_r($arr); 
echo "becomes<br />"; 
echo_r($tree); 

回答

1

由於錯誤提示,您在函數期望使用的對象 數組。 您可以簡單地使用toArray()方法轉換爲數組:

$tree = build($arr->toArray(), 0); 

http://laravel.com/docs/4.2/eloquent#converting-to-arrays-or-json

+0

奏效現在得到resolveded其投擲ErrorException(E_UNKNOWN)數組字符串轉換 – 2014-10-01 12:06:29

+0

@DanielEuchar什麼'的var_dump十分感謝( $ arr-> toArray());'輸出? – Steve 2014-10-01 12:10:08

+0

http://pastebin.com/KjRgqWgP這裏是輸出 – 2014-10-01 12:15:03