2015-02-07 116 views
2

我在PHP中製作二十一點遊戲。所以我製作了一個包含所有名稱和值的關聯數組。這看起來是這樣的:從關聯數組中隨機選擇

$cards = array("Schoppen 2"=>"2", "Schoppen 3"=>"3", "Schoppen 4"=>"4", "Schoppen 5"=>"5", "Schoppen 6"=>"6", "Schoppen 7"=>"7", "Schoppen 8"=>"8", "Schoppen 9"=>"9", "Schoppen 10"=>"10" 
      , "Schoppen boer"=>"10", "Schoppen vrouw"=>"10", "Schoppen heer"=>"10", "Schoppen aas"=>"11", "Harten 2"=>"2", "Harten 3"=>"3", "Harten 4"=>"4", "Harten 5"=>"5", "Harten 6"=>"6", "Harten 7"=>"7", "Harten 8"=>"8", "Harten 9"=>"9", "Harten 10"=>"10" 
      , "Harten boer"=>"10", "Harten vrouw"=>"10", "Harten heer"=>"10", "Harten aas"=>"11", "Klaveren 2"=>"2", "Klaveren 3"=>"3", "Klaveren 4"=>"4", "Klaveren 5"=>"5", "Klaveren 6"=>"6", "Klaveren 7"=>"7", "Klaveren 8"=>"8", "Klaveren 9"=>"9", "Klaveren 10"=>"10" 
      , "Klaveren boer"=>"10", "Klaveren vrouw"=>"10", "Klaveren heer"=>"10", "Klaveren aas"=>"11", "Ruiten 2"=>"2", "Ruiten 3"=>"3", "Ruiten 4"=>"4", "Ruiten 5"=>"5", "Ruiten 6"=>"6", "Ruiten 7"=>"7", "Ruiten 8"=>"8", "Ruiten 9"=>"9", "Ruiten 10"=>"10" 
      , "Ruiten boer"=>"10", "Ruiten vrouw"=>"10", "Ruiten heer"=>"10", "Ruiten aas"=>"11"); 

現在我想挑選2張牌的球員和2張卡爲經銷商,因此,使用該即時通訊:

$playercards = array_rand($cards, 2);
$dealercards = array_rand($cards, 2);

但現在,如果我回聲$playercards其空。有人看到這個問題?因爲我以前沒有使用array_rand。

此外卡可能不一樣。所以一旦被挑選出來,他不能再被array_rand選中,是否有機會解決這個問題呢?

謝謝!

+2

'的print_r($ playercards) ;'; '$ playercards'是一個數組,所以你不能使用echo – Rizier123 2015-02-07 15:46:15

+0

啊太糟糕了,工作。但現在我也想要現在的價值。所以我可以使用它在二十一點,還有一種方法來做到這一點? – Chiel 2015-02-07 15:48:57

+0

你可以作爲一個普通的數組訪問它,請參閱:http://php.net/manual/en/language.types.array.php(例如'echo $ playercards [0];') – Rizier123 2015-02-07 15:50:46

回答

2

既然你在玩牌,爲什麼不使用shuffle函數?

shuffle($cards); 
$card_player_1 = array_shift($cards); 
$card_player_2 = array_shift($cards); 
$card_dealer_1 = array_shift($cards); 
$card_dealer_2 = array_shift($cards); 

這些卡將出數組感謝到array_shift

更新,如果你想保持鍵

,有解釋如何實現它的文檔在後:

在保留鍵值012ff值的同時對隨機關聯和非關聯數組進行隨機排序。同時返回混洗數組,而不是將其混洗到位 。

function shuffle_assoc($list) { 
    if (!is_array($list)) return $list; 

    $keys = array_keys($list); 
    shuffle($keys); 
    $random = array(); 
    foreach ($keys as $key) { 
    $random[$key] = $list[$key]; 
    } 
    return $random; 
} 

那麼你的代碼:

$cards_shuffled = shuffle_assoc($cards); 
$card_player_1 = array_shift($cards_shuffled); 
$card_player_2 = array_shift($cards_shuffled); 
$card_dealer_1 = array_shift($cards_shuffled); 
$card_dealer_2 = array_shift($cards_shuffled); 

如果你想存儲密鑰和不同的變量值,你可以使用這種方法:

$cards_shuffled = shuffle_assoc($cards); 
list($card_player_1_key, $card_player_1_value) = each($cards_shuffled); 
array_shift($cards_shuffled); 
list($card_player_2_key, $card_player_2_value) = each($cards_shuffled); 
array_shift($cards_shuffled); 
list($card_dealer_1_key, $card_dealer_1_value) = each($cards_shuffled); 
array_shift($cards_shuffled); 
list($card_dealer_2_key, $card_dealer_2_value) = each($cards_shuffled); 
array_shift($cards_shuffled); 

echo $card_player_1_key;// Print key of player 1 card. 
echo $card_player_1_value;// Print value of player 1 card. 
echo $card_dealer_2_key;// Print key of dealer second card. 
+0

這可行,但我只獲得價值然後,我也想要這個名字。在屏幕上顯示卡片。有什麼辦法嗎?所以我得到卡的價值和卡的名字在變量中?像$ nameplayercard1 =和$ valueplayercard1 = – Chiel 2015-02-07 15:51:40

+0

是的,檢查更新:) – acontell 2015-02-07 15:55:54

+0

echo $ card_player_1;只是給一個價值還沒有名字? – Chiel 2015-02-07 16:07:07