PHP数组随机获取键值对报错:尝试访问布尔类型数组偏移量
错误原因与修正方案
错误原因
shuffle()函数的作用是直接修改传入的原数组,将其打乱顺序,它的返回值是布尔类型(执行成功返回true,失败返回false),并非你以为的“打乱后的新数组”。你把这个布尔值赋值给了$shuffled,之后试图用$shuffled[0]访问数组偏移量,自然会触发“尝试访问布尔类型值的数组偏移量”的警告。
修正方案
方案1:保留原数组顺序的前提下获取随机元素
先复制原数组,再打乱副本,避免影响原数组的初始顺序:
$colors = array("Yellow Sun" => "FAE500", "Golden" => "fab600", "Orange Juice" => "FF6D00", "Photo Blue" => "A2E5F4"); $shuffledColors = $colors; // 复制原数组 shuffle($shuffledColors); // 打乱副本 print_r($shuffledColors[0]); // 输出打乱后的第一个元素
方案2:直接修改原数组获取随机元素
如果不需要保留原数组的初始顺序,直接打乱原数组即可:
$colors = array("Yellow Sun" => "FAE500", "Golden" => "fab600", "Orange Juice" => "FF6D00", "Photo Blue" => "A2E5F4"); shuffle($colors); // 直接打乱原数组 print_r($colors[0]); // 输出打乱后的第一个元素
更高效的方法:直接获取单个随机键值对
如果只是想获取一个随机的键值对,没必要打乱整个数组,用array_rand()更高效:
$colors = array("Yellow Sun" => "FAE500", "Golden" => "fab600", "Orange Juice" => "FF6D00", "Photo Blue" => "A2E5F4"); $randomKey = array_rand($colors); // 随机获取一个键 echo "键:{$randomKey},值:{$colors[$randomKey]}";
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

