我从用户表中使用随机函数获取了所有用户记录, 现在,当我循环用户并尝试显示时,
我需要这样的记录:
user a = user b
user c = user a
user b = user c
我不能这样:
user a = user a
user b = user b
以下是我的代码
public function randomUser(){
$userData1 = User::inRandomOrder()->orderBy('email', 'ASC')->get();
$userData2 = User::inRandomOrder()->orderBy('id', 'DESC')->get();
foreach($userData1 as $key => $value ) {
if($userData1[$key]->id != $userData2[$key]->id){
echo $userData1[$key]->first_name.$userData1[$key]->last_name."-".$userData2[$key]->first_name.$userData2[$key]->last_name."<br>";
}
}
}
答案 0 :(得分:1)
inRandomOrder()超级慢,所以你可能不想使用它。 您应该在没有orderBy的情况下通过简单查询从DB中选择一次数据。
将结果用户数组分为两个变量。
$a = $b = ['user a','user b','user c'];
随机
的随机数组 $ ashuffle($a);
将其循环到 do-while 循环中 随机数组 $ b 并比较 $ a&amp; $ b 数组索引&amp;值
do{
shuffle($b);
$c = array_diff_assoc($a, $b);
}while(count($c)!=count($a));
将结果用户数组分为两个变量。
$a = $b = [array('id' => 1, 'name' => "abc"),array('id' => 2, 'name' => "def"),array('id' => 3, 'name' => "ghi")];
随机
的随机数组 $ ashuffle($a);
比较多维数组的函数
function arrayRecursiveDiff($aArray1, $aArray2) {
$aReturn = array();
foreach ($aArray1 as $mKey => $mValue) {
if (array_key_exists($mKey, $aArray2)) {
if (is_array($mValue)) {
$aRecursiveDiff = arrayRecursiveDiff($mValue, $aArray2[$mKey]);
if (count($aRecursiveDiff)) { $aReturn[$mKey] = $aRecursiveDiff; }
} else {
if ($mValue != $aArray2[$mKey]) {
$aReturn[$mKey] = $mValue;
}
}
} else {
$aReturn[$mKey] = $mValue;
}
}
return $aReturn;
}
将其循环到 do-while 循环中 随机数组 $ b 并比较 $ a&amp; $ b 数组索引&amp;值
do{
shuffle($b);
$c = arrayRecursiveDiff($a, $b);
}while(count($c)!=count($a));
两个阵列彼此完全不同。现在你可以用这两个数组做任何事情了。
答案 1 :(得分:0)