PHP没有回显JSON编码中传递的数组的所有内容
我试图随机显示收藏的内容(4项)。我工作得很好,除了前3项显示,但数组中的最后2项不显示,我总是得到一个空白回音。为什么会这样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
$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Ö”。后者给了我Ã
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不支持扩展字符)?