【问题标题】:Displaying the key of array, after json encoding in php在php中进行json编码后显示数组的键
【发布时间】:2018-08-01 09:59:33
【问题描述】:

这是我使用 php 编写的代码,经过一些查询和获取

不管查询方法,这里是获取:

while($row = mysqli_fetch_assoc($result6))
{
    $json_array6["spams"] = $row;
}

然后我想添加一个带有键和值的新数组元素:

$arrnew["is_spam_by_me"] = false;
array_push($json_array6["spams"], $arrnew["is_spam_by_me"]);

然后我将使用一些合并数组的 json_encode,包括这个(仅使用这个为例)。那么我得到的json值为:

"垃圾邮件":{"total":"0","0":false}

“total”键来自查询,不是问题,“0”键是问题。

而我想要展示的是:

"垃圾邮件":{"total":"0","is_spam_by_me":false}

我的代码哪里出错了?抱歉解释太长了

【问题讨论】:

  • 您在while-loop 的每次迭代中都会覆盖$json_array6["spams"],因此它只会包含最后一行。
  • array_push 是创建“0”索引的原因。你应该改用$json_array6['spams']['is_spam_by_me']=$arrnew['is_spam_by_me'];
  • 只是为了检查一下 - 因为这看起来像一个总数,您是否希望仍然只有 1 行?
  • @MagnusEriksson 那么我不应该使用while循环吗?我刚刚发现我不需要 while 循环:S
  • @Nick 哇,这解决了我的问题。谢谢!

标签: php mysql json


【解决方案1】:
$json_array6[]["spams"] = $row;

试试这个。在您继续将$row 值放在$json_array6["spams"] 字段中。使用上述方法,您将创建一个多维数组,以便您可以使用所需的键存储所有值。请记住,每个数组键都是唯一的,因此如果您想要相同的键名,您需要在数组内部创建一个新数组(嵌套数组)。

因此,您的代码中的问题是,在您创建的数组中,您只留下了查询中最后一个获取的对象,因为您正在覆盖 while 中的数组字段。

当然,既然您有一个多维数组,您可以使用foreach 循环访问它,并且您可以在其中添加您需要的额外数组字段。

【讨论】:

  • 感谢您指出多维数组,解决了我的问题!
【解决方案2】:

您应该直接将值添加到数组中,而不是

$arrnew["is_spam_by_me"] = false;

这样设置...

$json_array6["spams"]["is_spam_by_me"] = false;

但正如 cmets 中所述,这只会产生 1 个结果,因为您的循环会不断覆盖相同的值。

你最终得到结果的原因是……

array_push($json_array6["spams"], $arrnew["is_spam_by_me"]);

您将$arrnew["is_spam_by_me"] 的值(即false)添加到数组中,您可以改用array_merge(),但上述方法会更容易。

编辑: 只需查看您的结果,如果您不需要循环 - 即看起来好像您获取总数(在这种情况下为计数)而不是一组结果,那么您根本不需要循环!

$json_array6["spams"] = mysqli_fetch_assoc($result6);
$json_array6["spams"]["is_spam_by_me"] = false;

【讨论】:

  • 是的,我只是认为 array_push 是导致问题的原因。感谢您帮助它解决了问题!
猜你喜欢
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多