PHP不会回显在JSON编码中传递的数组的每个内容

时间:2015-12-31 09:39:58

标签: php

我试图随机显示集合的内容(4项)。我完美地工作,除了前3项显示但数组中的最后2项没有,我总是得到一个空白的回声。为什么会这样?

$sql = "SELECT test FROM sandbox";

$collections = [];

if ($result = mysqli_query($connection, $sql)) {
  while($row = mysqli_fetch_row($result)){
      $collections[] = $row;
  }
  echo json_encode(array('test'=>$collections[rand(0, count($collections))]));
}

修改:

  • Var_dump显示所有内容都已获取并存储在数组
  • 无错误记录
  • 记录的字符串为utf8_unicode_ci
  • 带有变音符号的字符串既不显示json编码,也不显示普通字符串,如“echoÖ”。后者给了我Ã

2 个答案:

答案 0 :(得分:1)

您的数据库连接很可能不使用UTF-8。这就是json_encode失败的原因 - 它只适用于UTF-8编码的字符。

尝试发出

SET NAMES utf8
在查询你的桌子之前

。或者在使用mysqli_set_charset($connection, 'utf8')扩展程序时使用mysqli

正如其他人已经指出的那样,它应该是

count($collections) - 1

因为rand()将最低值和最高值作为其函数参数返回。但count($collections)不是长度为count($collections)的数组的有效索引。

答案 1 :(得分:-1)

我猜您的问题在于您的代码,

rand(0, count($collections))])

如果您在rand()array length范围内运行array length,例如0和4,则表示您不会将rand()结果作为2, 2,3,4表示你随机选择多次选择一个键。