我以前从不需要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
],
等
是否可以(使用一种简单的方法)使输出更像:
"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
布局并不是特别重要,但是将它们组合在一起是很重要的。
从Google搜索获得相关结果的努力很少。
我之所以要求一种简单的方法,是因为我确定我可以提出一些幻想式的循环,该循环首先计算条目的数量,然后循环以继续添加相关数据-这很可能就是答案,但我只是想知道。
非常感谢
编辑:
我未删除此消息,因为我的修复尝试没有用。
代码如下:
$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
]
}
该文件将由移动应用读取-应用开发者刚刚告诉我,该文件必须采用这种格式。
很尴尬的道歉。
答案 0 :(得分:2)
当您从数据库循环记录时,构建一个多维数组:
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[]
添加时)
答案 1 :(得分:1)
我建议使用PDO代替mysqli进行数据库访问,而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()
函数可一次提取所有记录,因此无需循环。