首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php/mysql将数组写入json文件

问php/mysql将数组写入json文件
EN

Stack Overflow用户
提问于 2016-02-11 19:39:48
回答 2查看 111关注 0票数 2

我有以下问题,我的php代码从dB获取所需的数据:

代码语言:javascript
复制
<?php

require('dB_connect.php');

$reportID = intval($_GET['q']);


$sql = "SELECT nmech, nelect, nplant, ncivil FROM `flashreport` WHERE ID = '".$reportID."'";
$result = mysqli_query($dbc, $sql);

$emparray = array();
while($row =mysqli_fetch_assoc($result))
{
    $emparray[] = $row;
}
file_put_contents("newport.json", json_encode($emparray,JSON_FORCE_OBJECT));

mysqli_close($dbc);

?>

正如您所看到的,这将写入json文件-结果:

代码语言:javascript
复制
{"0":{"nmech":"2.00","nelect":"2.00","nplant":"2.00","ncivil":"2.00"}}

当我使用以下js代码从json文件中提取时:

代码语言:javascript
复制
$.getJSON('newport.json', function(data) {
console.log(data);

使用chrome的控制台日志显示以下内容:

代码语言:javascript
复制
[Object]
0: Object
nmech: "3.00"
__proto__: Object
length: 1

只显示第一个键/值对,而不是所有的4K/V对?有人能解释一下我做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-11 19:48:46

将结果写入json文件是过分的,IMHO。为什么不直接将json添加到模板或页面视图(PHP)中。

代码语言:javascript
复制
<script>
    // Create settings from PHP/Session and 
    // Initialize Registration Namespace
    var registrationSettings = <?php echo (!empty($data)) ? @json_encode($data) : json_encode(array()); ?>;
    Registration.init({ settings: window.registrationSettings });
</script>

显然,您没有注册命名空间对象,但这只是在页面首次加载时从PHP设置设置的示例方法。

所有你真正需要它输出一些数据。

代码语言:javascript
复制
<script>
    var newport = <?php echo (!empty($emparray)) ? @json_encode($emparray) : json_encode(array()); ?>;
</script>

或者是一种更简单的写作方式。

代码语言:javascript
复制
<script>
    var newport = <?php echo (!empty($emparray)) ? @json_encode($emparray) : '[]'; ?>;
</script>

我可以看到您试图文件(或缓存)结果。您可能应该在PHP控制器中编写一个AJAX方法来处理请求。数据可以在Memcached或其他快速数据处理程序中缓存服务器端。大多数PHP框架都支持memcached。

票数 1
EN

Stack Overflow用户

发布于 2016-02-11 19:48:10

这是可以的,因为PHP数组如下所示:

代码语言:javascript
复制
<?php 
$arr = [
    [
        "key1" => "value1",
        "key2" => "value2",
    ]
]

必须使用数据访问第一个元素的key1部分。

另一个(更好的解决方案)是不要在php中使用while循环,因为在您的情况下,您期望从mysql返回一个元素。然后像这样使用:

代码语言:javascript
复制
<?php
require('dB_connect.php');
$reportID = intval($_GET['q']);

$sql = "SELECT nmech, nelect, nplant, ncivil FROM `flashreport` WHERE ID = '".$reportID."'";
$result = mysqli_query($dbc, $sql);

//Get first row from db.
$emparray = mysqli_fetch_assoc($result);
file_put_contents("newport.json", json_encode($emparray,JSON_FORCE_OBJECT));

mysqli_close($dbc);
?>

现在,您的数据将在javascript中,正如您在开始时所期望的那样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35348564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档