[英]PHP: foreach loop with array_merge to create json objects
我是php新手,但到目前为止我真的很喜欢! 现在我偶然发现了array_merge
的问题。
这是我的代码,它只是获取数据库中指定的每个表,然后将其制成一个大的json文件。
$tables = array("buildings", "medical", "other", "tools", "traps", "weapons");
foreach ($tables as $table) {
// Get tables from database
$sth = $db->query("SELECT * FROM $table");
$result = $sth->fetchAll();
// Merge arrays together
if ($arr === null) {
//echo "its 0 <br/> ";
$arr = array( "$table" => $result );
} else {
//echo "more than 0 <br/> ";
$arr2 = array( "$table" => $result );
$merge = array_merge($arr, $arr2);
}
} //End loop
echo $merge;
到目前为止,它以某种方式起作用,我设法以我想要的完美方式显示了第一个表格“建筑物”和最后一个表格“武器”!
但是我不明白为什么它会跳过其他表。我相信它与$arr2
,我需要为每个表指定一个唯一的数组。 但是我怎么能做到这一点? 这是走的路还是有一个更有效的方法来做到这一点? 谢谢!
您可以将所有内容放入唯一的数组中,例如:
$myArray["$table"] = $result;
$tables = array("buildings", "medical", "other", "tools", "traps", "weapons");
$tableArr = array();
foreach ($tables as $table) {
// Get tables from database
$sth = $db->query("SELECT * FROM $table");
$result = $sth->fetchAll();
if(isset($result)){
$tableArr[$table] = $result;
}else{
$tableArr[$table] = '';
}
} //End loop
print_r($tableArr);
创建新数组并将索引设置为表名,并将其结果存储在该数组中。
如果我理解正确...
代替这两行
$arr2 = array( "$table" => $result );
$merge = array_merge($arr, $arr2);
您可以尝试以下方法:
$tables[$table] = $result;
由于这条线而失败
$merge = array_merge($arr, $arr2);
您的合并始终是$ arr(这是$ tables中的第一个条目)和$ arr2(这是正在处理的最新条目)的合并。 您没有将数据与先前合并的数据合并,例如
$arr = array_merge($arr, $arr2)
同样,您可以通过将$ arr设置为一个空数组来启动,从而摆脱if / else逻辑。
$arr = array();
您的代码可以大大简化。
$tables = array("buildings", "medical", "other", "tools", "traps", "weapons");
foreach ($tables as & $table) {
$table = $db->query("SELECT * FROM $table")->fetchAll();
}
echo json_encode($tables);
当然,为了使代码更健壮,您仍然需要检查错误(数据库和JSON错误),但越简单越好。 简单是件好事,尤其是在编程方面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.