PHP没有回显JSON编码中传递的数组的所有内容

PHP没有回显JSON编码中传递的数组的所有内容,php,Php,我试图随机显示收藏的内容(4项)。我工作得很好,除了前3项显示,但数组中的最后2项不显示,我总是得到一个空白回音。为什么会这样 $sql = "SELECT test FROM sandbox"; $collections = []; if ($result = mysqli_query($connection, $sql)) { while($row = mysqli_fetch_row($result)){ $collections[] = $row; } ech

我试图随机显示收藏的内容(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显示所有内容都被提取并存储在数组中
  • 没有错误日志
  • 记录的Kolation为utf8\u unicode\u ci
  • 带有umlauts的字符串既不显示为json encode,也不显示为普通字符串,如“echoÖ”。后者给了我Ã

您的数据库连接很可能未使用UTF-8。这就是为什么
json\u encode
失败的原因-它只适用于UTF-8编码字符

试着发一份

SET NAMES utf8
在查询表之前。或者在使用
mysqli
扩展时使用
mysqli\u set\u字符集($connection,'utf8')

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

count($collections) - 1

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

我想你的问题在于你的代码,

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

当您在
数组长度
数组长度
范围内运行
rand()
时,例如0和4,谁说您没有得到
rand()
结果是2,2,3,4,这意味着您随机选择一个键多次。

您所说的“我总是得到一个空白回音”到底是什么意思。当然,回音不是完全“空白”,因为它应该显示数组符号。请为您的问题添加更多详细信息:1。存储在数据库和2中的值。您描述的输出。这只是一个非常疯狂的猜测,尽管您希望自己已经考虑过了:请记住,浏览器将尝试将输出解释为html,而不是纯文本,因此,如果显示的值包含html标记,则您必须转义这些值…@arkascha它确实是空的,没有笑话。即使在签出dom树时,这也意味着
json\u encode()
失败。请检查您的http服务器错误日志文件。尽管我怀疑这是否真的是问题所在。这里有些“可疑”…@arkascha我正在用XAMPP在本地主机上测试。我的意思是,除了最后两个,其他的都能用。我会试试的。我以前使用过utf8_编码,但它不能通过phpmyadmin工作,但当我再次测试代码时,没有任何更改。您不能通过phpmyadmin进行此操作。您必须在用于查询数据的连接上执行此操作。这是每个连接的设置。您是指sql字符串吗?您如何知道它是“ASCII”(ASCII不支持扩展字符)?