2015-07-02 54 views
1

我使用json _encode()傳遞db值。以下是查詢和所有作品沒關係。獲取沒有索引號的json_encode數據

但是,當我向陣列添加一個額外的數據時,我在輸出數據前面得到一個數字。

$sql = "SELECT item, price, availability 
     FROM items 
      WHERE category = :category 
      ORDER BY item DESC"; 
$stmt= $connect->prepare($sql); 
$stmt->execute(array(':category'=>"fruits")); 
$rslt = $stmt->fetchAll(PDO::FETCH_ASSOC); 

foreach ($rslt as $val){ 
    $data[] = $val; 
} 
$data['additional'] = $someAdditionalData; 
echo json_encode($data); 

電流輸出:

{"0":{"item":"lychee"},"1":{"item":"ornage"},"2": "item":"apple"},"additional":ABC} 

我的問題是,我怎麼沒有索引號的輸出(如下)

[{"item":"lychee"},{"item":"ornage"},{"item":"apple"},{"additional":"ABC"}] 
+0

只需放下'foreach()'循環,你就可以擁有它。 – Havelock

+0

@Havelock謝謝。我用'$ data [] = $ rslt;'替換了'foreach()'循環,但是這不會給我預期的輸出? – Becky

回答

2

PHP選擇將數組序列化爲對象時任何數組鍵不是數字或當數組有缺少索引時。

您可以按現有的陣列中的其他元素:

$data[] = ['additional' => $someAdditionalData]; 

,或者更好,選擇不同的結構:

$items = []; 
foreach ($rslt as $val){ 
    $items[] = $val; 
} 
echo json_encode([ 
    'items' => $items, 
    'additional' => $someAdditionalData; 
]); 

在JavaScript中,你就可以訪問使用data.items項目和附加數據通過data.additional

1

索引號是自動,因爲你必須分配分配了一個自己稱爲「額外」的索引。 在代碼中嘗試改變

$data['additional'] = $someAdditionalData; 

$data[] = array('additional' => $someAdditionalDat); 
0

使用array_values()您的問題:

$arr['additional'] = array_values($arr['additional']); 
$arr = json_encode($arr); 

爲什麼?因爲你不需要重新排序數組的密鑰而不需要設置數組的密鑰。因此,在此之後,只有通過JSON才能保留這一點的方法也是編碼密鑰。但是,在應用array_values()後,您將獲得有序密鑰(從0開始),可以在不包含密鑰的情況下對其進行正確編碼。