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

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

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

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

這個(gè)就差點(diǎn)符合我的要求了。
但是組合的數(shù)據(jù)會(huì)重復(fù)
應(yīng)該不難,但是我是小白。
來(lái)個(gè)大哥幫忙阿

回答
編輯回答
撥弦

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

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

最簡(jiǎn)單的方式

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

注意,這個(gè)方式會(huì)改變?cè)瓟?shù)組,如果不希望改變?cè)瓟?shù)組的話,那就需要加一次判斷

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

// 判斷元素是否獲取過(guò)并且取出的元素個(gè)數(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ù)組前三個(gè)串接成字符串
return implode('', array_slice($a, 3));
// 輸出可能是:greenbrownred
2017年11月22日 13:10