

配列からランダムに重複せず値を取り出す方法が実現できず困っています。  
以下、コードです。  
実際に走らせると、ArrayArrayArrayArrayArrayと返ってきます。  
原因はどこにあるのでしょうか。

[code]

    //カードを作成
    $cards = array();
    $marks = array("clover","heart","diamond","spade");
    
    for($mark=0;$mark<4;$mark++){
        for($num=1;$num<=13;$num++){
            $newCard = array($marks[$mark] =>"$num");
            array_push($cards,$newCard);
        }
    }   
    
    for($i=0;$i<=5;$i++){
        $rand = array_rand($cards,2);
        echo $cards[$rand[0]];
    }
    
[/code]


CC BY-SA 3.0
2016-07-15T16:40:23.917
27653
2016-07-22T05:08:35.793
2016-07-15T19:51:24.490
784
14914
question
php array
PHP 配列からランダムに重複せず値を取り出す


array_pushは、配列の最後に値を加えるものですので

[code]

    array_push($cards, array('clover' => 10);
    
[/code]

これは、

[code]

    array(
        0 => 
        array(
            'clover' => 10,
        ),
    )
    
[/code]

という形になります。  
つまり、

[code]

    echo $cards[0]
    
[/code]

としても

[code]

    array('clover' => 10)
    
[/code]

が返答され、echo結果はArrayとなります。

書くとすれば、

[code]

    echo 'Mark: '.key($cards[$rand[0]]).' Num: '.current($cards[$rand[0]]);
    
[/code]

と、取り出したArrayのキーと値をそれぞれ取るようにすればよいかと思います。

ここまでが主題のArrayArrayArrayについて。

また、2つ目のfor文でカードを「引く」処理を行っているようですが、for文の中でarray_randを使っているので、重複せずに取得する、という希望は叶えられていないと思われます。  
array_randを使ってランダムに取得するのであれば、2つ目のfor文を

[code]

    foreach(array_rand($cards, 6) as $cardKey) {
        echo 'Mark: '.key($cards[$cardKey]).' Num: '.current($cards[$cardKey]).PHP_EOL;
    }
    
[/code]

と言うような形にしてはいかがでしょうか。


CC BY-SA 3.0
2016-07-22T05:08:35.793
27808
2016-07-22T05:08:35.793
15529
27653
answer