

連想配列のkey(Keyの順番は固定)とvalueの組み合わせをシャッフルする方法はありませんか？  
`array_rand()`を使ったのですが、何も変わらず  
`shuffle`を使うと数字の配列になってしまいます。  
どうすれば良いかわかりません。

[code]

    array (
      'Philippines' => 'banana',
      'Japan' => 'rice',
      'France' => 'bread',
      'India' => 'curry',
    )  
    
[/code]

これをランダムにシャッフルして、  
以下のようにしたいのですが、

[code]

    array (
      'Philippines' => 'rice',
      'Japan' => 'curry',
      'France' => 'banana',
      'India' => 'bread',
    ) 
    
[/code]


CC BY-SA 4.0
2022-06-16T09:00:15.040
89418
2023-08-06T01:28:58.590
2022-06-16T12:43:03.203
9820
45215
question
php
連想配列のkey（Keyの順番は固定）とvalueの組み合わせをシャッフル方法


keyとvalueを取り出して、valueのみシャッフルする方法です。

[code]

    <?php
    $ar = array (
      'Philippines' => 'banana',
      'Japan' => 'rice',
      'France' => 'bread',
      'India' => 'curry',
    );
    
    $keys = array_keys($ar);
    $values = array_values($ar);
    shuffle($values);
    
    for($i = 0; $i < count($ar); $i++) {
        $ar[$keys[$i]] = $values[$i];
    }
    
    print_r($ar);
    ?>
    
[/code]


CC BY-SA 4.0
2022-06-16T13:02:53.073
89427
2022-06-16T13:02:53.073
9820
89418
answer


shuffle を使用せずに array_rand を使ってやってみました。

[code]

    <?php
    
    $ar = array (
      'Philippines' => 'banana',
      'Japan' => 'rice',
      'France' => 'bread',
      'India' => 'curry',
    ) ;
    
    $values = array_values($ar) ;
    
    foreach($ar as $key => $dummy){
        $x = array_rand($values,1) ;
        $ar[$key] = $values[$x] ;
        unset($values[$x]) ;
    }
    
    print_r($ar) ;
    
[/code]

同じ物が二度使用されないように使い終わったら unset するのがミソです。


CC BY-SA 4.0
2023-08-06T01:28:58.590
95865
2023-08-06T01:28:58.590
59393
89418
answer