JSON对象作为数组中的数组如何在循环中保持循环

时间:2019-03-20 13:18:39

标签: php mysql arrays json

我的问题是:

我将表连接在一起,有些表包含多个数据,我应该提取这些数据,但是我的JSON对象只检索一个。我认为这是因为while循环还会遍历我的主表,获取所有内容并停止循环,考虑到没有其他可循环的内容(我基于数据库中的id来获取数据,而这些是auto_incremented等。

所以我的问题是:

如何遍历主表(一次),但继续遍历联接表并将这些值插入其“ own”数组中?

这就是我现在拥有的:

$sqli = "SELECT event.*, typex.id, typex.type 
        FROM event 
            JOIN typex ON event.id = typex.id 
        WHERE event.id = ?";

mysqli_stmt_bind_param($stmt, 's', $editID); //fetch data based on ID
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$resultCheck = mysqli_num_rows($result);

if ($resultCheck > 0) {
    $data = array();

    while ($row = mysqli_fetch_assoc($result)) {
        $data['all'] = array($row); 
        $data['type'] = array($row['type']);  
    }
    //Echo data as JSON
    echo json_encode($data);

给您一个想法:

$data['all']是将容纳所有$ row的数组(这样我可以轻松地从主表访问列)

$data['type']但是应该只保存表中的数据:typex(typex是一个联接表)。

一个例子:

您有一个名为stack的主表和一个已加入的名为typex的表。

您要考虑到主表在stack上有一个$data['all'],并从数组{{1}中插入表auto_increment中ID为5的所有行。 id,它会循环一次...但是现在是我失败的部分,需要您的帮助: 在已联接的表unique中,您有2行ID号为5的行。应提取这两行并将其插入数组typex中。如何实现?

2 个答案:

答案 0 :(得分:2)

$data['all'] = array($row); 
$data['type'] = array($row['type']);  

这将始终设置最后$row的结果,如果您需要所有行,则需要这样做:

$data[] = array('all'=>$row,'type'=>$row['type']); 

现在$ data的每个项目都是一个带有2个键的数组,alltype

答案 1 :(得分:0)

一些需要更改的地方:

首先在查询中,由于eventtypex表都具有id列,因此您将需要在其中一个上使用别名,以便您可以区分它们,所以我做了以防万一。{p>

typex.event

在这里,我修改了代码以使用OO mysqli,因为它很容易阅读

$sqli = "SELECT event.*, typex.id as typex_id, typex.type as typex_type
        FROM event 
            JOIN typex ON event.id = typex.id 
        WHERE event.id = ?";