最近做了一个项目,其中有这样一个需求要实现,原有帖子列表A,现在需要在A中推广新业务B,那么需要在A列表中1:1混合B中的数据,随机混合,但是需要保持A和B两列原来的数据排序,具体详情请看下文。
原理
获知总共元素数量N;
for循环N次,取随机数;
根据随机数依次从头获取A或B的值,推入新数组中;
代码:
php" id="highlighter_642123">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//随机合并两个数组元素,保持原有数据的排序不变(即各个数组的元素在合并后的数组中排序与自身原来一致) function shuffleMergeArray() { $mergeArray = array (); $sum = count ( $array1 ) + count ( $array2 ); for ( $k = $sum ; $k > 0; $k --) { $number = mt_rand(1, 2); if ( $number == 1) { $mergeArray [] = $array2 ? array_shift ( $array2 ) : array_shift ( $array1 ); } else { $mergeArray [] = $array1 ? array_shift ( $array1 ) : array_shift ( $array2 ); } } return $mergeArray ; } |
示例:
合并前的数组:
1
2
|
$array1 = array(1, 2, 3, 4); $array2 = array( 'a' , 'b' , 'c' , 'd' , 'e' ); |
合并后的数据:
1
2
3
4
5
6
7
8
9
10
11
|
$mergeArray = array ( 0 => 'a' , 1 => 1, 2 => 'b' , 3 => 2, 4 => 'c' , 5 => 'd' , 6 => 3, 7 => 4, 8 => 'e' , ) |
php数组随机排序
1
2
3
4
5
|
<?php $array = array ( 'A' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '10' , 'J' , 'Q' , 'K' ); shuffle( $array ); //随机排序数组 print_r( $array ); //输出数组 ?> |