

１ヶ月のうちの特定の日にちの配列（11月）と  
曜日によって割り当てるフルーツ用の配列があります。  
これを使って該当する曜日に特定の配列を入れ込みたいのですが、何故か２３で止まっています・・  
どうしてなのかわかりません。

（また今後 1週目、2週目ごと といった制限をかける実装を行う予定です）

[code]

    $fruitArray = array (
                'tue' => 'banana',
                'fri' => 'apple',
                'sat' => 'orange',
              );
    
    
    
    $dayArray=
     array (
      1 => 'tue',
      2 => 'wed',
      4 => 'fri',
      5 => 'sat',
      7 => 'mon',
      8 => 'tue',
      9 => 'wed',
      10 => 'thu',
      11 => 'fri',
      12 => 'sat',
      14 => 'mon',
      15 => 'tue',
      16 => 'wed',
      17 => 'thu',
      18 => 'fri',
      19 => 'sat',
      21 => 'mon',
      22 => 'tue',
      24 => 'thu',
      25 => 'fri',
      26 => 'sat',
      28 => 'mon',
      29 => 'tue',
      30 => 'wed',
    ) 
    
[/code]

[code]

            foreach($dayArray as $day){
              if(isset($fruitArray[$day])){
                $result[] = [$day,$fruitArray[$day]];
              } else {
                $result[] = [$day,null];
              }
            }
    
[/code]

結果は何故か２３で止まってしまいます。

[code]

     array (
      0 => 
      array (
        0 => 'tue',
        1 => 'banana',
      ),
      1 => 
      array (
        0 => 'wed',
        1 => '',
      ),
      2 => 
      array (
        0 => 'fri',
        1 => 'apple',
      ),
      3 => 
      array (
        0 => 'sat',
        1 => 'orange',
      ),
      4 => 
      array (
        0 => 'mon',
        1 => '',
      ),
      5 => 
      array (
        0 => 'tue',
        1 => 'banana',
      ),
      6 => 
      array (
        0 => 'wed',
        1 => '',
      ),
      7 => 
      array (
        0 => 'thu',
        1 => '',
      ),
      8 => 
      array (
        0 => 'fri',
        1 => 'apple',
      ),
      9 => 
      array (
        0 => 'sat',
        1 => 'orange',
      ),
      10 => 
      array (
        0 => 'mon',
        1 => '',
      ),
      11 => 
      array (
        0 => 'tue',
        1 => 'banana',
      ),
      12 => 
      array (
        0 => 'wed',
        1 => '',
      ),
      13 => 
      array (
        0 => 'thu',
        1 => '',
      ),
      14 => 
      array (
        0 => 'fri',
        1 => 'apple',
      ),
      15 => 
      array (
        0 => 'sat',
        1 => 'orange',
      ),
      16 => 
      array (
        0 => 'mon',
        1 => '',
      ),
      17 => 
      array (
        0 => 'tue',
        1 => 'banana',
      ),
      18 => 
      array (
        0 => 'thu',
        1 => '',
      ),
      19 => 
      array (
        0 => 'fri',
        1 => 'apple',
      ),
      20 => 
      array (
        0 => 'sat',
        1 => 'orange',
      ),
      21 => 
      array (
        0 => 'mon',
        1 => '',
      ),
      22 => 
      array (
        0 => 'tue',
        1 => 'banana',
      ),
      23 => 
      array (
        0 => 'wed',
        1 => '',
      ),
    )  
    
[/code]


CC BY-SA 4.0
2022-05-26T19:19:32.377
89073
2022-05-27T06:37:09.607
45215
question
php
ある配列と配列を組み合わせて、新しい配列を作りたいのですがうまくいきません。


正常な動作です。  
配列のキーを指定しなかった場合、0から連続する番号がふり直されます。  
`$dayArray`には24個の要素しか登録されていないため、番号が23までとなってしまいます。  
配列のキーを維持したい場合は、下記のように配列のキーを指定してあげるとよいです。

[code]

            foreach($dayArray as $key => $day){
              if(isset($fruitArray[$day])){
                $result[$key] = [$day,$fruitArray[$day]];
              } else {
                $result[$key] = [$day,null];
              }
            }
    
[/code]

参考になれば幸いです。


CC BY-SA 4.0
2022-05-26T20:06:16.473
89074
2022-05-26T20:06:16.473
29034
89073
answer


参考までに、文字列データだけの一次元配列なら str_replaceで置換することも出来ます。

[code]

    $dayArray=
      array (
        1 => 'tue',
        2 => 'wed',
        4 => 'fri',
        5 => 'sat',
        7 => 'mon',
        8 => 'tue',
        9 => 'wed',
        10 => 'thu',
        11 => 'fri',
        12 => 'sat',
        14 => 'mon',
        15 => 'tue',
        16 => 'wed',
        17 => 'thu',
        18 => 'fri',
        19 => 'sat',
        21 => 'mon',
        22 => 'tue',
        24 => 'thu',
        25 => 'fri',
        26 => 'sat',
        28 => 'mon',
        29 => 'tue',
        30 => 'wed',
      );
    
    $new_array = str_replace(array('tue', 'fri','sat'),array('banana', 'apple', 'orange'),$dayArray);
    $new_array = str_replace(array('mon', 'wed','thu','sun'),'',$new_array);
    print_r($new_array);
    
[/code]


CC BY-SA 4.0
2022-05-27T00:10:32.543
89075
2022-05-27T00:10:32.543
22793
89073
answer

[code]

    $result = array_map(fn($v) => [$v, $fruitArray[$v] ?? null], $dayArray);
    
[/code]


CC BY-SA 4.0
2022-05-27T06:37:09.607
89082
2022-05-27T06:37:09.607
47127
89073
answer