0

让我首先开始,抱歉标题令人困惑。我不知道如何准确地描述它,但这里是。所以我在数据库中查询字符串。如果只找到 1 个结果,那么创建一个数组、用信息填充它、编码 JSON 并返回它相对容易。我对何时有多个结果感到困惑。下面的代码是我正在使用的,但我非常怀疑它是否正确。我无法使用我需要的方法将其编码为 JSON 格式。如果您至少可以帮助我指出正确的方向,我将不胜感激!谢谢!


PHP:

if ($action == 'profile') {
    while ($pson = mysql_fetch_array($personQuery)) {
        $typeSearch = 'profile';
        $profQuery = mysql_query("SELECT * FROM tableName WHERE ColumnName LIKE '$query'");
        $compQuery = mysql_query("SELECT * FROM tableName2 WHERE ColumnName LIKE '$query'");
        if ($profQuery && mysql_num_rows($profQuery) > 0) {
            $personQueryRows = mysql_num_rows($profQuery);
            while ($row = mysql_fetch_array($profQuery)) {
                if ($compQuery && mysql_num_rows($compQuery) > 0) {
                    while ($com = mysql_fetch_array($compQuery)) {
                        if (mysql_num_rows($profQuery) > 1) { 
                            $compQueryRows = mysql_num_rows($compQuery);
                            if ($compQueryRows > 0) {
                                $compReturn = "true";
                            } else {
                                $compReturn = "false";
                            }
                            $nameArray = Array(
                                "success"=>"true",
                                "date"=>date(),
                                "time"=>$time,
                                "action"=>$action,
                                "returned"=>"true"
                            );
                            global $result;
                            for ($i=1;$i<=$personQueryRows;$i++) {
                                $nameResult[$i]=Array(
                                    "id"=>$row['id'],
                                    "name"=>$row['name'],
                                    "gender"=>$row['gender'],
                                    "comp"=>$row['company'],
                                    "queryType"=>"profile"
                                );
                                $result = array_merge($nameArray, $nameResult[$i]);
                            }
                            $encodedJSON = json_encode($result);
                            echo $encodedJSON;
                        }
                    }
                }
            }
        }
    }
}

}

返回的 JSON:

{"success":"true","date":"Jun 29 2012","time":"14:43:16","action":"profile","returned":"true","id":"14321","name":"John Smith","gender":"male","comp":"ABC Studios, LLC.","queryType":"profile"}
{"success":"true","date":"Jun 29 2012","time":"14:43:16","action":"profile","returned":"true","id":"292742","name":"John Smith","gender":"male","comp":"DEF Studios, LLC.","queryType":"profile"}

JavaScript 错误(解析 JSON 时):

Uncaught SyntaxError: Unexpected token { 

PS 我刚刚开始使用 PHP 数组和 JSON 格式,所以如果这完全错误,我深表歉意。还在学习阶段。

4

2 回答 2

3

看起来你正在构建 $nameResult[$i],但是你这样做了:

$result = array_merge($nameArray, $nameResult[$i]);

您在 for 循环的每次迭代中都执行此操作(对于您返回的每一行一次),这意味着每次您都在破坏 $result。

在你完成那个 for 循环之后,你可以获取最终的 $result(意味着最后一个 $personQueryRows),然后对其进行 json_encode。

查看您的另一个问题(http://stackoverflow.com/questions/11257490/jquery-parse-multidimensional-array),看起来您真正应该做的是在您遍历 $personQueryRows 的循环之前:

$output=$nameArray;

然后将 array_merge 行替换为:

$output[] = $nameResult[$i];

最后一行会将 $result 数组作为新的数组成员附加到 $output 数组上,这意味着它正在嵌套数组,这是嵌套 JSON 所需要的。

于 2012-06-29T22:37:31.967 回答
0

您的代码应如下所示:

global $result;
$result = array();
.......    

if ($action == 'profile') {
  while{{{{{{{{...}}}}}}}}}}}

  $encodedJSON = json_encode( $result );
  echo $encodedJSON;
}
于 2012-06-29T22:33:40.567 回答