検索

ホームページ  >  に質問  >  本文

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中文网2903日前493

全員に返信(4)返信します

  • 伊谢尔伦

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

    1

    2

    3

    4

    5

    6

    7

    <code class="lang-php">$randStr = [];

    for (array_rand($data, 4) => $k as $v) {

        //...

        $randStr[] = substr($data[$k], -2);

    }

    echo 'A-AA-[' . implode(' ', $randStr) . ']';\

    </code>

    返事
    0
  • 迷茫

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

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

    </code>

    返事
    0
  • PHP中文网

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

    由 woody 方案改编。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    <code class="lang-php">$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) . ']';

    </code>

    返事
    0
  • ringa_lee

    ringa_lee2017-04-10 14:52:41

    不错,学习了@!

    返事
    0
  • キャンセル返事