0

我似乎无法弄清楚问题所在,但我的 PHP 数组没有输出为正确的 JSON。我删除了 json_encode 函数,只是发现我的数组是级联的并且没有正确格式化自己。这是一个输出示例(删除了 json_encode):

Array (
    [0] => Array (
        [username] => g4m3b0y
        [profile_photo] => default.png
        [email] => michael@me.com
        [first_name] => Michael
        [last_name] => Simpson
    )
) 
Array (
    [0] => Array (
        [username] => g4m3b0y
        [profile_photo] => default.png
        [email] => michael@me.com
        [first_name] => Michael
        [last_name] => Simpson
    )
    [1] => Array (
        [username] => michelle
        [profile_photo] => default.png
        [email] => michelle@gmail.com
        [first_name] => Michelle
        [last_name] => Houston
    )
)

如您所见,它在单独的数组中创建了重复的结果,因此我对 JSON 输出有疑问。这是我生成结果的代码:

    $sql2 = "SELECT DISTINCT username, profile_photo, first_name, last_name, email FROM users WHERE (
        first_name LIKE '%$q%'
        OR last_name LIKE '%$q%'
    ) ORDER BY last_name";

    $sq2 = mysql_query($sql2);
    $st2 = mysql_num_rows($sq2);

    if($st2>=1) {   
        while($a = mysql_fetch_array($sq2)) {
            $userRow[] = array(
                'username' => $a['username'],
                'profile_photo'   => $a['profile_photo'],
                'email'   => $a['email'],
                'first_name'   => $a['first_name'],
                'last_name'   => $a['last_name']
            );
        header('Content-Type: application/json');
        echo json_encode($userRow);
        }
    }

    else {
        exit;
    }
4

1 回答 1

1

您对headerandjson_encode的调用在您的 while 循环中。将它移到外面,它会将很多编译成一个 json 字符串。目前它正在输出多个单独的。

这也解释了为什么你也会得到副本。迭代一个将第一行添加到数组$userRow中,然后输出获得键的结果0。然后第二次迭代将下一行添加到现有数组中,因此得到 key 1。然后它再次回显 json 编码的字符串,因此这次打印 0 和 1。因此 0 然后 0 然后 1

$sql2 = "SELECT DISTINCT username, profile_photo, first_name, last_name, email FROM users WHERE (
    first_name LIKE '%$q%'
    OR last_name LIKE '%$q%'
) ORDER BY last_name";

$sq2 = mysql_query($sql2);
$st2 = mysql_num_rows($sq2);

if($st2>=1) {   
    while($a = mysql_fetch_array($sq2)) {
        $userRow[] = array(
            'username' => $a['username'],
            'profile_photo'   => $a['profile_photo'],
            'email'   => $a['email'],
            'first_name'   => $a['first_name'],
            'last_name'   => $a['last_name']
        );
    }

    // I moved this below the above }
    header('Content-Type: application/json');
    echo json_encode($userRow);
}

else {
    exit;
}
于 2013-04-02T23:23:09.827 回答