繁体   English   中英

如何在php中创建一个空白的关联数组

[英]How to create a blank associative array in php

我的php脚本将数据返回到由JavaScript处理的Web客户端。

如果找到数据,则将其存储在关联数组/对象中。 如果没有找到数据,我想发送一个空白的关联数组。

我在线看到的唯一示例是在手册中,您可以在其中创建一个空类,然后从中实例化一个对象。

下面是我的代码以及它在Web客户端生成的结果

            $sql = 'select job, client, project from jobs j left join client c on c.key = j.cKey where j.key='.$this->p['reckey'];
        if ( $result = $db->query($sql) )
        {
            if ($result->num_rows > 0)
            {
                $l = mysqli_fetch_all( $result, $resulttype = MYSQLI_ASSOC );
                $this->res_array['info'] = $l[0];
            }else{
                $this->errors[] = 'No such job # '.$this->p['reckey'];
                $this->res_array['info']=[];
            }
        }else{
            $this->errors[] = 'Query failed!';
            $this->res_array['info']=[];
        }
        $this->res_array['errors'] = $this->errors;
        echo json_encode ($this->res_array);

以下是两个示例,说明数据在被JSON解码之前到达Web客户端时的样子。 请注意“info”元素的区别。

响应{ “info”:{“job”:“999”,“client”:“我的公司,公司”,“项目”:“此项目”} ,“错误”:[]}

错误回复{ “info”:[] ,“errors”:[“没有这样的工作#0”]}

在成功的响应中,我有一个对象/关联数组,我将使用它

for (variable in object) {...}

在空白响应中,我只得到标准数组[]方括号,我将使用

for (step = 0; step < info.length; step++) {}

这当然是因为我在上面的php代码中指定了一个空白数组。

我的问题很简单,如何更改我的PHP代码,以便传输空白的关联数组?

我在线看到的唯一示例是在手册中,您可以在其中创建一个空类,然后从中实例化一个对象。

听起来你已经回答了自己的问题!

因为在JavaScript中,对象和关联数组基本上是相同的,所以你要做的就是替换这一行:

$this->res_array['info']=[];

有了这个:

$this->res_array["info"] = new StdClass;

或者,如果您只想在发送响应之前进行更改,则可以检查空信息数组并将其替换为空类。

if(!count($this->res_array["info"]))
    $this->res_array["info"] = new StdClass;

我建议尽可能地利用这两个世界,并让PHP生成一个关联数组的数组,即使你最多也期望,但至少你没有使用相同的结构。

所以改变:

$this->res_array['info'] = $l[0];

至:

$this->res_array['info'] = $l;

然后在JavaScript中执行:

for (var step = 0; step < info.length; step++) {
    for (variable in info[step]) {
        // ...
    }
}

...如果你仍然需要,你可以在JavaScript中单独处理无数据条件。 就像是:

if (errors.length) {
    // deal with this case...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM