簡體   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