PHP 随机随机抽取数组维护键 = > 值

2022-08-30 09:57:04

我一直在谷歌上寻找答案,但似乎找不到万无一失的东西,也负担不起搞砸这个(进入生产网站)。

我拥有的是一个具有20多个过滤器的高级搜索,它返回一个包含ID和距离的数组。我需要做的是每次都对这些结果进行随机排序以随机顺序显示。我目前拥有的数组是:

Array (
    [0] => Array ( [id] => 1 [distance] => 1.95124994507577 )
    [1] => Array ( [id] => 13 [distance] => 4.75358968511882 )
    [2] => Array ( [id] => 7 [distance] => 33.2223233233323 )
    [3] => Array ( [id] => 21 [distance] => 18.2155453552336 )
    [4] => Array ( [id] => 102 [distance] = 221.2212587899658 )
)

我需要做的是每次都随机化或排序这些,但保持id和距离对,即:

Array (
    [4] => Array ( [id] => 102 [distance] = 221.2212587899658 )
    [1] => Array ( [id] => 13 [distance] => 4.75358968511882 )
    [3] => Array ( [id] => 21 [distance] => 18.2155453552336 )
    [2] => Array ( [id] => 7 [distance] => 33.2223233233323 )
    [0] => Array ( [id] => 1 [distance] => 1.95124994507577 )
)

谢谢:)


答案 1

随机播放文档下的第一个用户帖子

随机排列关联和非关联数组,同时保留键、值对。还返回随机排列的数组,而不是将其随机排列到位。

function shuffle_assoc($list) { 
  if (!is_array($list)) return $list; 

  $keys = array_keys($list); 
  shuffle($keys); 
  $random = array(); 
  foreach ($keys as $key) { 
    $random[$key] = $list[$key]; 
  }
  return $random; 
} 

测试用例:

$arr = array();
$arr[] = array('id' => 5, 'foo' => 'hello');
$arr[] = array('id' => 7, 'foo' => 'byebye');
$arr[] = array('id' => 9, 'foo' => 'foo');
print_r(shuffle_assoc($arr));
print_r(shuffle_assoc($arr));
print_r(shuffle_assoc($arr));

答案 2

从 5.3.0 开始,您可以执行以下操作:

uksort($array, function() { return rand() > rand(); });