如何从数据库创建数组并使用array_rand随机获取数据?
解决方法:直接使用从数据库获取的数组即可
你犯的核心错误是没必要把已经生成的数组转成字符串再重新塞进新数组,这反而破坏了原本正确的数组结构。
先看你的问题出在哪:
你的数据库查询和循环部分是对的:
$query2 = $db->prepare ("SELECT idc FROM content ORDER BY RAND() LIMIT 5"); $query2->execute(); while ($value2 = $query2->fetch()) { $data_idc[] = $value2['idc']; }
这时候$data_idc已经是一个包含5个(或更少,如果数据库不足5条)idc值的数组,结构和你手动创建的$a完全一致,比如:
$data_idc = ['idc_1', 'idc_2', 'idc_3', 'idc_4', 'idc_5'];
但你后面多此一举的操作把数组变成了单个字符串元素的数组:
$bank_idc_1 = [ $string_result = "'". implode("', '", $data_idc) . "'" ];
这时候$bank_idc_1的结构是:
$bank_idc_1 = ["'idc_1', 'idc_2', 'idc_3', 'idc_4', 'idc_5'"];
它只有一个元素,就是拼接出来的长字符串,所以array_rand只会返回索引0,输出的是整个字符串,而不是随机的单个idc值。
正确的做法:
直接用$data_idc就行,不需要额外处理:
// 数据库查询部分不变 $query2 = $db->prepare ("SELECT idc FROM content ORDER BY RAND() LIMIT 5"); $query2->execute(); $data_idc = []; // 先初始化数组,避免未定义警告 while ($value2 = $query2->fetch()) { $data_idc[] = $value2['idc']; } // 直接使用数组获取随机值 if (!empty($data_idc)) { // 先判断数组非空,避免报错 echo $data_idc[array_rand($data_idc)]; } else { echo "没有找到数据"; }
如果一定要把数组赋值给$bank_idc_1,直接赋值即可:
$bank_idc_1 = $data_idc; if (!empty($bank_idc_1)) { echo $bank_idc_1[array_rand($bank_idc_1)]; }
额外提示:
- 提前初始化
$data_idc = []可以避免如果数据库没有返回数据时,变量未定义的警告。 - 加上
empty()判断可以防止数组为空时,array_rand抛出错误。
内容的提问来源于stack exchange,提问作者jazuly aja
相关产品推荐
相关产品推荐

