鍍金池/ 問答/PHP/ 【求助】php數(shù)組,隨機組合輸出字符串,刷新網(wǎng)頁重新組合順序,不重復

【求助】php數(shù)組,隨機組合輸出字符串,刷新網(wǎng)頁重新組合順序,不重復

一個數(shù)組里多個關鍵詞,隨機組合輸出。刷新組合順序不一樣
輸出字符串

$a=array("red","green","blue","yellow","brown");
$random_keys=array_rand($a,4);
echo $a[$random_keys[0]]."
";
echo $a[$random_keys[1]]."
";
echo $a[$random_keys[2]];

這個就差點符合我的要求了。
但是組合的數(shù)據(jù)會重復
應該不難,但是我是小白。
來個大哥幫忙阿

回答
編輯回答
撥弦

感覺你需要的是洗牌算法,洗牌算法就是shuffle函數(shù)。

2017年12月21日 08:20
編輯回答
咕嚕嚕

最簡單的方式

$a = ["red", "green", "blue", "yellow", "brown"];
shuffle($a);    // 打亂數(shù)組
echo array_shift($a);    // 或者用array_pop函數(shù)也可以,這樣組合數(shù)據(jù)就不會重復了
echo array_shift($a);
echo array_shift($a);

注意,這個方式會改變原數(shù)組,如果不希望改變原數(shù)組的話,那就需要加一次判斷

$a = ["red", "green", "blue", "yellow", "brown"];
shuffle($a);
$has = [];    // 保存取出來的元素

// 判斷元素是否獲取過并且取出的元素個數(shù)是否已經(jīng)滿足需求
while (!in_array($a[0], $has) && count($has) <= 3) {
    $has[] = $a[0];
}

echo implode(',', $has); // 將取出的元素用,組合成字符串輸出
2017年7月26日 08:10
編輯回答
凝雅
// 打亂數(shù)組
shuffle($a);
// 取數(shù)組前三個串接成字符串
return implode('', array_slice($a, 3));
// 輸出可能是:greenbrownred
2017年11月22日 13:10