【问题标题】:get json_encode data without an index number获取没有索引号的 json_encode 数据
【发布时间】:2015-07-02 04:43:16
【问题描述】:

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

【问题讨论】:

  • 只需删除foreach() 循环,您就会拥有它。
  • @Havelock 谢谢。我用$data[] = $rslt; 替换了foreach() 循环,但这并没有给出我预期的输出?

标签: javascript php json pdo


【解决方案1】:

any 数组键不是数字或数组缺少索引时,PHP 选择将数组序列化为对象。

您可以在现有数组上推送另一个元素:

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

或者,也许更好,选择不同的结构:

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

在 JavaScript 中,您可以使用 data.items 访问项目,并通过 data.additional 访问其他数据。

【讨论】:

    【解决方案2】:

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

    $data['additional'] = $someAdditionalData;
    

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

    【讨论】:

      【解决方案3】:

      使用array_values() 处理您的问题:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-11
        • 1970-01-01
        • 2021-10-18
        • 1970-01-01
        • 2015-07-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多