0

次のように、mysql テーブルから結果を取得し、各セルを配列に入れています。

$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'],
    );          
}

次に、特定の友達を検索します。たとえば、友人の名前Osmanを検索したい場合、and と入力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)すべてのメンバーのidand を返しますfirstName

PS 私は AJAX を使用して呼び出しに JavaScript を使用します。

4

2 に答える 2

0

これを変える:

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

これに:

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

それが空で$arrayないのですか?

于 2012-06-21T01:15:17.407 に答える
0

配列構造がそのような場合:

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

これは、配列にインデックスが付けられ、2 つのレベルであることを意味します。

したがって、それを通り抜ける正しい方法は次のとおりです。

foreach($array as $cur_element) {
    $id = $cur_element['id'];
    $firstName = $cur_element['firstName'];
}
于 2012-06-21T00:23:16.853 に答える