获取没有索引号的json_encode数据

时间:2015-07-02 04:43:17

标签: javascript php json pdo

我使用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"}]

3 个答案:

答案 0 :(得分: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 :(得分:1)

索引编号是自动分配的,因为您已经为自己分配了一个名为“附加”的索引。 在您的代码中尝试更改

=countif(C:C,9)

c

答案 2 :(得分:0)

使用array_values()解决您的问题:

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

为什么呢?因为您在不重新排序的情况下取消了数组键的设置。所以在此之后,保持JSON的唯一方法也是编码键。但是,在应用array_values()后,您将获得有序键(从0开始),可以正确编码而不包括键。