私は通常のデッキから10枚のランダムなカードを出すプログラムを持っています。
時々私はシェルでスクリプトを実行すると、私は次のエラーメッセージ受け取る:次のようにphp - 「未定義のオフセット」エラーメッセージが表示されていますが、その理由はわかりません。
PHP Notice: Undefined offset: ..... on line 15
を私のコードが見えます:
<?php
$deck = array(
array('A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K'), //club
array('A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K'), //spade
array('A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K'), //heart
array('A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K') //diamond
);
$i = 0;
for ($i = 1; $i <= 10; $i++) {
$a = rand(0, 3); //card's suit
$nr = count($deck[$a]); //how many cards of the suit are available?
$b = rand(0, $nr--); //pick a random number out of the available ones
$card = $deck[$a][$b]; //pick a card [---LINE 15---]
switch ($a) {
case 0:
$c = "club";
break;
case 1:
$c = "spade";
break;
case 2:
$c = "heart";
break;
case 3:
$c = "diamond";
break;
}
echo $c . " " . $card . "\n" . "remaining: " . $nr . "\n";
unset($deck[$a][$b]); //remove the card you drew
array_values($deck[$a]); //rearrange the index of the suit you drew the card from
}
?>
誰かが初心者を助けてもらえますか?
$ aと$ bを出力して、何が返ってきているかを確認してください。デッキがそのインデックスを持っているかどうかを調べようとしてください。 – Exprator
あなたは 'unset() 'カードなので、探してみてください。それらはもはや配列に存在しません。あなたのスクリプトは恐らく重複カードを与えようとします。 – BlitZ
'$ nr - 'はrand関数の呼び出し後にのみ減少し、 ' - $ nr'または' $ nr-1'を使用する必要があります – xander