search

Home  >  Q&A  >  body text

PHP:如何用较少的代码实现如下需求呢?

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]

PHP中文网PHP中文网2902 days ago480

reply all(4)I'll reply

  • 伊谢尔伦

    伊谢尔伦2017-04-10 14:52:41

    $randStr = [];
    for (array_rand($data, 4) => $k as $v) {
        //...
        $randStr[] = substr($data[$k], -2);
    }
    echo 'A-AA-[' . implode(' ', $randStr) . ']';\
    

    reply
    0
  • 迷茫

    迷茫2017-04-10 14:52:41

    $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);
    

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 14:52:41

    由 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) . ']';
    

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 14:52:41

    不错,学习了@!

    reply
    0
  • Cancelreply