shuffle()函数会重置键名为数字索引,处理关联数组时需先提取键、打乱后再重组以保留键名。

PHP中打乱数组最直接、最常用的方法就是使用内置的
shuffle()
shuffle()
shuffle()
shuffle()
<?php $numbers = [1, 2, 3, 4, 5]; echo "原始数组:"; print_r($numbers); shuffle($numbers); // 调用 shuffle() 函数打乱数组 echo "打乱后的数组:"; print_r($numbers); $fruits = ["apple", "banana", "cherry", "date"]; echo "原始水果数组:"; print_r($fruits); shuffle($fruits); echo "打乱后的水果数组:"; print_r($fruits); ?>
运行这段代码,你会看到每次输出的“打乱后的数组”顺序都可能不一样。
shuffle()
true
false
当你用
shuffle()
['name' => 'Alice', 'age' => 30]
shuffle()
'name'
'age'
[0 => 'Alice', 1 => 30]
立即学习“PHP免费学习笔记(深入)”;
这在很多情况下可能不是你想要的结果,特别是当你依赖键名来识别数据时。比如,你有一个用户列表,每个用户都有一个唯一的 ID 作为键,如果你直接
shuffle()
<?php
$user_data = [
'user_a' => ['name' => 'Alice', 'score' => 95],
'user_b' => ['name' => 'Bob', 'score' => 88],
'user_c' => ['name' => 'Charlie', 'score' => 92]
];
echo "原始关联数组:";
print_r($user_data);
shuffle($user_data); // 尝试打乱关联数组
echo "打乱后的关联数组(注意键名变化):";
print_r($user_data);
?>从输出中你可以清楚地看到,原有的
'user_a'
'user_b'
'user_c'
shuffle()
array_rand()
shuffle()
既然我们知道了
shuffle()
一种比较直接且常用的方法是,先提取出数组的所有键,然后对这些键进行
shuffle()
<?php
$product_list = [
'prod_101' => ['name' => '智能手机', 'price' => 2999],
'prod_102' => ['name' => '蓝牙耳机', 'price' => 399],
'prod_103' => ['name' => '智能手表', 'price' => 1299],
'prod_104' => ['name' => '充电宝', 'price' => 199]
];
echo "原始产品列表:\n";
foreach ($product_list as $key => $value) {
echo " {$key}: {$value['name']}\n";
}
// 1. 获取所有键
$keys = array_keys($product_list);
echo "\n原始键列表:";
print_r($keys);
// 2. 打乱键的顺序
shuffle($keys);
echo "打乱后的键列表:";
print_r($keys);
// 3. 根据打乱后的键顺序重新构建或遍历数组
$shuffled_product_list = [];
foreach ($keys as $key) {
$shuffled_product_list[$key] = $product_list[$key];
}
echo "\n保持键名并打乱后的产品列表:\n";
foreach ($shuffled_product_list as $key => $value) {
echo " {$key}: {$value['name']}\n";
}
?>这种方法通过操作键的列表,巧妙地避开了
shuffle()
array_rand()
array_rand()
当我们使用
shuffle()
关于随机性: PHP 的
shuffle()
shuffle()
random_bytes()
random_int()
关于性能:
shuffle()
shuffle()
<?php // 简单测试 shuffle() 的性能 $large_array = range(1, 100000); // 创建一个包含10万个元素的数组 $start_time = microtime(true); shuffle($large_array); $end_time = microtime(true); echo "打乱10万个元素的数组耗时:" . round(($end_time - $start_time) * 1000, 2) . " 毫秒\n"; // 再来一个更大的,比如100万个 $even_larger_array = range(1, 1000000); $start_time = microtime(true); shuffle($even_larger_array); $end_time = microtime(true); echo "打乱100万个元素的数组耗时:" . round(($end_time - $start_time) * 1000, 2) . " 毫秒\n"; ?>
从这个简单的测试可以看出,即使是处理数十万甚至百万级别的数组,
shuffle()
shuffle()
shuffle()
以上就是如何在PHP中随机打乱数组?shuffle()函数的使用方法详解的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号