Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从多维数组创建JSON输出_Php_Json - Fatal编程技术网

Php 从多维数组创建JSON输出

Php 从多维数组创建JSON输出,php,json,Php,Json,我用三个SQL查询的结果填充一个数组。然后我创建一个临时表,将所有这些数据插入其中,然后查询该表,以便能够将结果作为json数组传递给我的Java应用程序(Android) 所以 输出看起来像 [[{"APPID":"0000000021","APPNAME":"Enhanced Email","MARKETLINK":"https:\/\/play.google.com\/store\/apps\/details?id=com.qs.enhancedemail","FILENAME":"000

我用三个SQL查询的结果填充一个数组。然后我创建一个临时表,将所有这些数据插入其中,然后查询该表,以便能够将结果作为json数组传递给我的Java应用程序(Android)

所以

输出看起来像

[[{"APPID":"0000000021","APPNAME":"Enhanced Email","MARKETLINK":"https:\/\/play.google.com\/store\/apps\/details?id=com.qs.enhancedemail","FILENAME":"00000000089_2013-10-23 13:26:38_Enhanced Email.png","USERID":"00000000089","BADGEID":"2626511"},{"APPID":"0000000037","APPNAME":"Mobile....
然而,我认为一定有一个更好的解决办法,而不是搞乱这个临时桌子的东西。有没有一种方法可以从$row2数组创建相同的输出,而无需任何sql查询

解决方案: 我混合了hotzu和SoaperGEM的溶液:

  $result = array();
try{
    $stmt = $conn->prepare("SELECT c.APPID, t.APPNAME, t.MARKETLINK, t.FILENAME, t.USERID, c.BADGEID FROM COMMENTROOM c
    INNER JOIN TABLE_ADS t ON t.ID = c.APPID 
    INNER JOIN REG_USERS r ON r.ID = t.USERID 
    WHERE c.BADGEID = ? 
    GROUP BY c.APPID");
    $stmt->execute(array($badgeID));
    while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
        $result[] = $row;
    }
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
    $server_dir = $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    header('Location: http://' . $server_dir);
    exit();
}


echo "[".json_encode($result)."]";
exit();

这实际上是一个SQL问题,而不是其他任何问题。您以前从未在SQL中使用过联接吗?您需要做的就是这样:

SELECT c.APPID, t.APPNAME, t.MARKETLINK, t.FILENAME, t.USERID, r.BADGEID 
FROM COMMENTROOM c 
INNER JOIN TABLE_ADS t ON c.APPID = t.ID 
INNER JOIN REG_USERS r ON r.ID = t.USERID

已编辑

试试这个:

$result = array();
try{
    $stmt = $conn->prepare("SELECT c.APPID, t.APPNAME, t.MARKETLINK, t.FILENAME, t.USERID, r.BADGEID FROM COMMENTROOM c
    LEFT JOIN TABLE_ADS t ON t.ID = c.APPID 
    LEFT JOIN REG_USERS r ON r.ID = t.USERID 
    WHERE c.APPID = ? 
    GROUP BY c.APPID";
    $stmt->execute(array($badgeID));
    while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
        $result[] = $row;
    }
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}

echo json_encode($result);

这给了我完整性约束冲突,因为表应该与列一起指定,就像SoaperGEM那样。而不是像SoaperGEM那样更改sql查询。我看不到你的完整表格结构。。。我知道这只是一个例子。你的代码和SoaperGEM一样优秀。我会努力让它工作。你能检查一下我在初始问题中添加的代码中的语法错误吗?主要问题是,如果我们看不到表的确切结构和表之间的关系,我们就无能为力。如果您无法成功使用我编辑的代码,您应该提供表结构,以及它们之间的关系,尝试使用左连接而不是内部连接。它不是null,我得到的是[]。这是由r.BADGEID=?行,因为没有它,我接收的结果$badgeID不为null,并且它在dbyes中有记录,WHERE是错误的,它应该是:WHERE c.APPID=?因为结果对象不在数组中。因此,如果您愿意,您应该在字符串化之前将$result放入数组中:echo json_encode(array($result))
SELECT c.APPID, t.APPNAME, t.MARKETLINK, t.FILENAME, t.USERID, r.BADGEID 
FROM COMMENTROOM c 
INNER JOIN TABLE_ADS t ON c.APPID = t.ID 
INNER JOIN REG_USERS r ON r.ID = t.USERID
$result = array();
try{
    $stmt = $conn->prepare("SELECT c.APPID, t.APPNAME, t.MARKETLINK, t.FILENAME, t.USERID, r.BADGEID FROM COMMENTROOM c
    LEFT JOIN TABLE_ADS t ON t.ID = c.APPID 
    LEFT JOIN REG_USERS r ON r.ID = t.USERID 
    WHERE c.APPID = ? 
    GROUP BY c.APPID";
    $stmt->execute(array($badgeID));
    while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
        $result[] = $row;
    }
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}

echo json_encode($result);