Php 返回有效的Json数组

Php 返回有效的Json数组,php,arrays,json,Php,Arrays,Json,我对Json和数组相当陌生,我只是想知道是否有人能纠正我尝试过的仍然输出无效字符串的代码 $json = array( 'posts' => array(), ); while($row = mysqli_fetch_array($result)) { $posts = array(); $posts['count'] = $rowcount; $posts['streamitem_id'] = $row['streamitem_

我对Json和数组相当陌生,我只是想知道是否有人能纠正我尝试过的仍然输出无效字符串的代码

$json = array(
    'posts' => array(),
);

    while($row = mysqli_fetch_array($result)) {
        $posts = array();
        $posts['count'] = $rowcount;
     $posts['streamitem_id'] = $row['streamitem_id'];


$json['posts'] = $posts;
echo json_encode($json);
}
我已使用并将firebug错误返回的数据发布在第6、11和16行

}{

  {
    "posts": {
        "count": 4,
        "streamitem_id": "1976"
    }
} {
    "posts": {
        "count": 4,
        "streamitem_id": "1980"
    }
} {
    "posts": {
        "count": 4,
        "streamitem_id": "1099"
    }
} {
    "posts": {
        "count": 4,
        "streamitem_id": "1178"
    }
}

把这个放在循环之外,您将覆盖并回显每个值,而不是一次完整地回显

内环

      $posts[] = ["count"=> $rowcount,"streamitem_id"=>$row['streamitem_id']);
后循环

  $json['posts'] = $posts;
  echo json_encode($json);

把这个放在循环之外,您将覆盖并回显每个值,而不是一次完整地回显

内环

      $posts[] = ["count"=> $rowcount,"streamitem_id"=>$row['streamitem_id']);
后循环

  $json['posts'] = $posts;
  echo json_encode($json);
我想你想要这个:

$posts = array();
$rowcount = 0;
while ($row = mysqli_fetch_array($result)) {
    $posts[] = array(
       'count' => $rowcount,
       'streamitem_id' = $row['streamitem_id'],
    );
    $rowcount++;
}

$json['posts'] = $posts;
echo json_encode($json);
我想你想要这个:

$posts = array();
$rowcount = 0;
while ($row = mysqli_fetch_array($result)) {
    $posts[] = array(
       'count' => $rowcount,
       'streamitem_id' = $row['streamitem_id'],
    );
    $rowcount++;
}

$json['posts'] = $posts;
echo json_encode($json);

一些人已经给出了一个有效的答案,但是,我相信array_push是最有效的方法,而不是反复重新定义$posts变量

$json = array(
    'posts' => array()
);

while($row = mysqli_fetch_array($result)) {
    array_push($json['posts'], $array(
        'count' => $rowcount,
        'streamitem_id' => $row['streamitem_id']
        )
    );
}
echo json_encode($json);
PS:我注意到您在每个post数组中放置了$rowcount。如果这不是有意的,我建议进行以下更改:

$json = array(
    'posts' => array(),
    'count' => $rowcount
);
然后在while循环中:

    array_push($json['posts'], $array(
        'streamitem_id' => $row['streamitem_id']
        )
    );
这样,您就可以引用post计数,而不会浪费内存

console.log(json['count']);

一些人已经给出了一个有效的答案,但是,我相信array_push是最有效的方法,而不是反复重新定义$posts变量

$json = array(
    'posts' => array()
);

while($row = mysqli_fetch_array($result)) {
    array_push($json['posts'], $array(
        'count' => $rowcount,
        'streamitem_id' => $row['streamitem_id']
        )
    );
}
echo json_encode($json);
PS:我注意到您在每个post数组中放置了$rowcount。如果这不是有意的,我建议进行以下更改:

$json = array(
    'posts' => array(),
    'count' => $rowcount
);
然后在while循环中:

    array_push($json['posts'], $array(
        'streamitem_id' => $row['streamitem_id']
        )
    );
这样,您就可以引用post计数,而不会浪费内存

console.log(json['count']);


您的
$rowcount
变量尚未初始化。第4、7和10行在哪里?请发布整个json。$rowcount已初始化。by
$rowcount=mysqli_num_rows($result)
就在我的查询下方-它不相关,只是添加了它,因为它是一个变量,需要通过json数组传递。此外,可以从第一行到最后一行计算行数,它将为您提供问题行,即开始和结束括号,现在是下面的第6、11和16行。谢谢大家ne.您的
$rowcount
变量尚未初始化。第4、7和10行在哪里?请发布整个json。$rowcount已初始化。by
$rowcount=mysqli_num_rows($result)
就在我的查询下方-它不相关,只是添加了它,因为它是一个变量,需要通过json数组传递。此外,可以从第一行到最后一行计算行数,它将为您提供问题行,即开始和结束括号,现在是下面的第6、11和16行。谢谢大家ne.Hi@Niklesh这现在是有效的json,但只返回一条记录,而不是我在循环中请求的4条记录。我如何修复此问题?谢谢更新了我的answerHi@Niklesh这现在是有效的json,但只返回一条记录,而不是我在循环中请求的4条记录。我如何修复此问题?谢谢更新了我的回答answer@Gateway没问题,我做了一个决定编辑来解释另一件事。编辑得很好。返回的字符串现在看起来像这样`{“posts”:[{“streamitem_id”:“1976”}、{“streamitem_id”:“1980”}、{“streamitem_id”:“1099”}、{“streamitem_id”:“1178”}、“count”:4}`接受你的答案。布朗尼对与另一部分的合作表示感谢。可能更简单:
$json['posts'][]=array('streamitem_id'=>$row['streamitem_id']);
另一种方法(为了进一步优化)是避免存储'streamitem_id'键。简单地说:array_push($json['posts'],$row)['streamitem_id'];我之所以这样说,是因为您已经知道'posts'包含流项目id。您的js对象应该如下所示:{“posts”:[“1976”、“1980”、“1099”、“1178”],“count”:4}PS:看起来$json['posts'][]可能会快几微秒。如果你有兴趣,我建议你对此做一些研究。@Gateway没问题。我做了一个编辑来说明另一件事。编辑得很好。返回的字符串现在看起来像是`{“posts”:[{“streamitem_id”:“1976”},{“streamitem_id”:“1980”},{“streamitem_id”:“1099”}、{“streamitem_id”:“1178”}、“count”:4}`接受了你的答案。布朗尼为你的另一部分付出了额外的努力而加分。可能更简单:
$json['posts'][]=array('streamitem_id'=>$row['streamitem_id']);
另一种方法(为了进一步优化)是为了避免存储“streamitem_id”键。简单地说:array_push($json['posts',$row['streamitem_id'));我这样说是因为您已经知道“posts”包含流项id。您的js对象应该如下所示:{“posts”:[“1976”,“1980”,“1099”,“1178”],“count”:4}PS:看起来$json['posts']可能会快几微秒。如果你有兴趣,我建议你做一些研究。