【问题标题】:PHP json_encode returning single row onlyPHP json_encode 仅返回单行
【发布时间】:2017-02-21 12:58:21
【问题描述】:

所以我有一个关联数组$_SESSION['cart_items'])这是我print_r($_SESSION['cart_items'])时的当前输出:

Array
(
    [3] => 23
    [5] => 5
    [4] => 1
)

在上面的输出中,第一个例如 [3]=>23 其中 [3] 是 id,23 是我从表单中输入的数量:

我目前的数据:

请注意,在上图中,数量列与我从表单中输入的数量不同。

到目前为止,这是我尝试过的代码:

$statement = $conn->query("SELECT id, name, price, quantity FROM product WHERE id IN (".implode(',',$_SESSION['cart_items']).")");

while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
    $data[] = $row;

}

print json_encode($data);

这是输出:

[{"id":"5","name":"ballpen","price":"23","quantity":"13"}]

如您所见,它有效,但我只得到一个应该是三行的单行。

我的查询有问题吗?

【问题讨论】:

  • 为什么要得到三行?!? json格式的意义是将复杂的数据结构转换为单个字符串。换行符没有用。所以问题是:你确定你真的想json_encode() 输出吗? 为什么
  • @arkascha 我的意思是我在数据库中有 3 条记录..
  • 好的,那么我建议您手动尝试该查询。您很可能只会在结果集中获得一个条目。
  • DB 3,4,5 中的产品 ID 是 cart_itemskeys 还是 23,5,1 的 ID 是 cart_item 的值?从您的示例中不清楚
  • 更新了我的帖子

标签: php mysql arrays json session


【解决方案1】:

您表明会话数组中的数组键与数据库中的ids 匹配。 implode() 内爆/加入数组中的值。所以你需要内爆密钥:

implode(',', array_keys($_SESSION['cart_items']))

或者翻转数组:

implode(',', array_flip($_SESSION['cart_items']))

【讨论】:

  • 非常快。有用!我如何访问这些值,因为我在角度使用它。
  • 视情况而定。 $ids = array_keys($_SESSION['cart_items']); $qty = $_SESSION['cart_items']
猜你喜欢
  • 2016-02-24
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 2013-10-26
  • 2010-12-30
相关资源
最近更新 更多