我以前从未需要过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()
函数一次提取所有记录,因此不需要循环。