php中具有多个数组的JSON的顺序,对象数量各不相同



我以前从未需要过json,所以我几乎没有经验。。。

我使用以下代码将多个数组输出到json文件中:

$file= 'myfile.json';
$contents = array('name' => $name,'busname' => $busname,'busdesc' => $busdesc, etc, etc);
$newcont=json_encode($contents, JSON_PRETTY_PRINT);
print_r($newcont);
file_put_contents($file, $newcont);

这正如预期的那样工作,输出给了我类似的东西:

"name": [
"joe blogs",
"random name 2",
"random name 3",
etc,
etc
],
"busname": [
"ABC business",
"DEF business",
"HIJ business",
etc,
etc
],
"busdesc": [
"We do stuff",
"We do other stuff",
"We don't do anything",
etc,
etc
],

etc

有没有可能(用一个简单的方法(使输出更像:

"id1": [  "joe blogs", "ABC business", "We do stuff", etc ]
"id2":  [   "random name 2", "DEF business", "We do other stuff", etc ]
"id3":  [   "random name 3", "HIJ business", "We don't do anything", etc ]
etc

布局并不特别重要,但将它们组合在一起才是

我在从谷歌搜索中获得相关结果方面收效甚微。

我之所以要求一个简单的方法,是因为我相信我可以想出一些奇特的循环,首先计算条目的数量,然后循环以不断添加相关数据——这很可能是答案,但我只是想知道。

非常感谢


编辑:

我已经取消删除了这一点,因为我的修复尝试没有成功。

这是代码:

$results = mysqli_query($con,"SELECT * FROM membersites  WHERE id>0 ORDER BY id, busname");
$totalmem = mysqli_num_rows($results);
while($business = mysqli_fetch_array($results))
{
$r1 = $business['id'];
$id[]=$r1;
$r2 = $business['name'];
$name[]=$r2;
$r4 = $business['busname'];
$busname[]=$r4;
$r5 = $business['busdesc'];
$busdesc[]=$r5; 
$all[] = "'id:''".$r1."''name:''".$r2."''busname:''".$r4."''busdesc:''".$r5."'";
}
$contents = array('members' => $all);
$newcont=json_encode($contents, JSON_PRETTY_PRINT);
print_r($newcont);

这几乎起到了作用,因为所有数据都被正确分组,但我只得到一个对象(成员(,里面有所有用户,而不是每个用户的单个对象。

同样,请记住,这是我必须输出任何json文件的第一个项目。

任何帮助都将不胜感激:(


编辑2(为清晰起见(

最终输出需要看起来像这个

{
[
{
"id":"1",
"name":"joe blogs",
"busname":"ABC business",
"busdesc":"We do stuff"
},
{
"id":"2",
"name":"joe blogs",
"busname":"random name 2",
"busdesc":"We do other stuff"
},
etc
]
}

这个文件将由一个移动应用程序读取——应用程序开发人员刚刚告诉我,它需要采用这种格式。

为自己的尴尬道歉。

当您从DB循环记录时,构建一个多维数组:

while($business = mysqli_fetch_array($results))
{
$all[] = [
'id' => $business['id'],
'name' => $business['name'],
'busname' => $business['busname'],
'busdesc' => $business['busdesc'],
];
// or 
$all[] = $business;
// or 
$all[ $business['id'] ] = $business;
}

然后,您可以将多维数组编码为JSON,如下所示:

$newcont = json_encode($all, JSON_FORCE_OBJECT | JSON_PRETTY_PRINT);

添加JSON_FORCE_OBJECT将保留数字密钥(即,当您使用$all[]添加时(

我建议使用PDO来访问数据库,而不是mysqli,后者最初是作为旧mysql扩展的权宜之计而开发的。但是,使用mysqli应该可以:

$result = $con->query("SELECT id, name, busname, busdesc FROM membersites WHERE id > 0 ORDER BY id, busname");
$data = $result->fetch_all();
$json = json_encode($data, JSON_PRETTY_PRINT);
file_put_contents($file, $json);

尽可能避免使用SELECT *。它减少了开销,并确保您知道收到的列的顺序。mysqli_result::fetch_all()函数一次提取所有记录,因此不需要循环。

最新更新