A-AA
B-BB
C-CC
D-DD
E-EE
F-FF
G-GG
H-HH
I-II
J-JJ
转换成如下形式:
A-AA-[随机从其他不重复的4行中抽取叠加的字母]
比如:
A-AA-[CC HH II DD]
B-BB-[CC II EE FF]
A-AA
B-BB
C-CC
D-DD
E-EE
F-FF
G-GG
H-HH
I-II
J-JJ
转换成如下形式:
A-AA-[随机从其他不重复的4行中抽取叠加的字母]
比如:
A-AA-[CC HH II DD]
B-BB-[CC II EE FF]
$array = array('A-AA','B-BB','C-CC','D-DD','E-EE','F-FF','G-GG','H-HH','I-II','J-JJ');
function transform(&$value,$key,$array)
{
$array_temp = $array;//复制一个数组
unset( $array_temp[$key] );//移除这个key的元素
$rand_keys = array_rand($array_temp,4);//抽出4个元素
shuffle($rand_keys);//打乱顺序
$result_str = [];
foreach ($rand_keys as $k) {
$result_str[] = substr($array_temp[$k], -2);//获取重叠字符
}
$others_str = implode(' ',$result_str); //空格分隔四个随机元素组成字符串
$value = sprintf("%s-[%s]",$value,$others_str);//整理输出字符串
}
array_walk($array,"transform",$array);
print_r($array);
由 woody 方案改编。
$data = array(
'A-AA',
'B-BB',
'C-CC',
'D-DD',
'E-EE',
'F-FF',
'G-GG',
'H-HH',
'I-II',
'J-JJ',
);
$randStr = '';
$randArr = array_rand($data, 5);
shuffle($randArr); // 打乱数组,防止开头的那个随机不到 G H I J.
foreach ( $randArr as $k => $v ) {
$randStr .= $k == 0 ? $data[$v] . '-[' : substr($data[$v], -2) . ' ';
}
echo rtrim($randStr) . ']';
4 回答2.9k 阅读
4 回答2.5k 阅读✓ 已解决
3 回答2k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决