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

5
我的PHP脚本将数据返回给Web客户端,由JavaScript处理。
如果找到数据,则将其存储在关联数组/对象中。 如果未找到数据,则希望发送一个空的关联数组。
我在网上看到的唯一示例是在手册中创建一个空类,然后从该类实例化一个对象。
以下是我的代码和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":"My Company, Inc. ","project":"This Project"},"errors":[]}
错误响应 {"info":[ ],"errors":["No such job # 0"]}
在成功的响应中,我有一个对象/关联数组,在其中我将使用
for (variable in object) {...}

在空响应中,我只会得到标准的数组 [ ] 方括号,这里我会使用。
for (step = 0; step < info.length; step++) {}

当然,这是因为我在上面的php代码中指定了一个空数组。我的问题很简单,如何更改我的php代码以传输一个空的关联数组?
2个回答

3

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

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

由于在JavaScript中,对象和关联数组基本上是一样的东西,所以你只需要替换这一行:

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

使用这个:

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

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

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

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Claus

0
我建议结合两者的优点,让PHP生成一个关联数组的数组,即使你最多只期望有一个元素,但至少在没有元素时你也可以使用同样的结构。
所以,请进行更改:
$this->res_array['info'] = $l[0];

to:

$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...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接