json_encode on PHP返回”;2〃;而不是在大约300行上一次方括号(其他都是正确的)


json_encode on PHP return "2" instead of square bracket one time on ~300 lines (others are correct)

我有一个函数,它以json形式返回大量数据。它运行良好,但今天出现了一个巨大的错误。我有这个字符串}]},"2":{"trainid而不是这个}]},{"trainid

不知从哪里来了"2":,不知道它是从哪里来的。

这是我的代码

$return_list = array();
$query = "SELECT * from train_users"
if($result = $mysqli->query($query)) {
  while($row = $result->fetch_assoc()) { 
    $trainlist = array();
    $query2 = "Select * FROM train WHERE train_users_id = ".$row['id_user'];
            if($result2 = $mysqli->query($query2)) {
                while($row2 = $result2->fetch_assoc()) { 
                    $poollist[] = $row2['trainid'];
                }
            }
    for($i = 0;  $i < count($finalPoolList) ; $i++) {
        $query2 = "Select * FROM trainpassengers WHERE trainid = ".$row['id_user'];
            if($result2 = $mysqli->query($query2)) {
                while($row2 = $result2->fetch_assoc()) { 
                    $row['train'][$i] = $rowPool;
                }
            }
    }
    $return_list[] = $row;
  }
}

另一种相同的错误是:

"trains":{"1":{

而不是这个:

"trains":[{

{"1":取代[,不知道为什么

JSON/Javascript有两种集合类型:数组和对象。数组是数字索引有序集合:
['foo', 'bar', 'baz']

对象是键值关联:

{ foo : 'bar', baz : 42 }

PHP只有一种集合类型:关联有序键值存储:

array('foo', 'bar' => 'baz', 42)

当编码为JSON时,任何具有从0开始的连续数字索引的PHP数组都会转换为JSON数组:

array('foo', 'bar', 'baz')  →  ['foo', 'bar', 'baz']

其他任何东西都转换为对象:

array(1 => 'foo', 2 => 'bar', 3 => 'baz')  →  { "1" : "foo", "2" : "bar", "3" : "baz" }

因为你正在创建这样的数组:

$row['train'][$i] = $rowPool;

$i并不总是从0开始,所以您正在创建转换为对象的数组
只需去掉$i:

$row['train'][] = $rowPool;

如果我理解正确,你得到了"trains":{"1":{?这意味着,火车是一个数组,有不同的元素。如果你打印一个火车树,它看起来像:

trains: {
  1: {
       First Element fo trains
     }
  2: {
       Second Element of trains
  }
}