2012-06-20 108 views
0

我從一個MySQL表得到結果,並把每個單元到一個數組如下:PHP的foreach提供的參數無效

$sqlArray = mysql_query("SELECT id,firstName FROM members WHERE id='$id'"); 
while ($arrayRow = mysql_fetch_array($sqlArray)) { 
    $friendArray[] = array(
    'id' => $arrayRow['id'], 
    'firstName' => $arrayRow['firstName'], 
    );   
} 

然後我做了一個特定的朋友搜索。例如,如果我想搜索一個朋友的名字奧斯曼,我會鍵入和o,它會返回給我所有以字母o開頭的結果。這裏是我的代碼爲:

function array_multi_search($array, $index, $pattern, $invert = FALSE) { 
    $output = array(); 
    if (is_array($array)) { 
     foreach($array as $i => $arr) { 
      // The index must exist and match the pattern 
      if (isset($arr[$index]) && (bool) $invert !== (bool) preg_match($pattern, $arr[$index])) { 
       $output[$i] = $arr; 
      } 
     } 
    } 
    return $output; 
} 
$filtered = array_multi_search($friendArray, 'firstName', '/^o/i'); 

然後它會打印出所有的結果。我的問題是,它返回一個錯誤,說"Invalid argument supplied to foreach()",這就是爲什麼我添加if(is_array))條件。如果我在index.php頁面中保留此代碼,但我將它移動到名爲phpScripts的子文件夾並且它在那裏不起作用,它工作正常。任何幫助?

$output沒有返回任何值,因爲顯然$friendArray不是數組。但我確認它是通過使用print_r($friendArray)並返回所有成員的idfirstName

P.S.我使用JavaScript來使用AJAX進行調用。

+0

我認爲你的$數組是空的,你可以print_r($ array); ?? foreach(null爲$ element) 將會失敗bigtime。 –

+0

'提供給foreach()的無效參數很清楚 – Norse

+0

我認爲還有print_r($ friendArray)返回成員的id和firstName – lomas09

回答

0

如果你的陣列結構是這樣的:

$friendArray[] = array(
    'id' => $arrayRow['id'], 
    'firstName' => $arrayRow['firstName'], 
); 

這意味着你的數組進行索引和兩個層次。

所以穿起來走路的正確的方法是:

foreach($array as $cur_element) { 
    $id = $cur_element['id']; 
    $firstName = $cur_element['firstName']; 
} 
0

更改此:

foreach($array as $i => $arr) { 

要這樣:

foreach((array)$array as $i => $arr) { 

你肯定$array空?