連想配列に同じ値を入れない

$total_arr = array();
$key_arr_count = count( $key_arr );
for ( $h = 0; $h < $key_arr_count; $h++ ) {

  if ( ! array_key_exists( $key_arr[ $h ], $total_arr ) ) {

    $total_arr[ $key_arr[ $h ] ]['email'] = (array) $mail_arr[ $h ];

  } else {

      $total_arr[ $key_arr[ $h ] ]['email'][] = $mail_arr[ $h ];

  }

  $total_arr[ $key_arr[ $h ]]['post_id'] = $post_id_arr[ $h ];

}

$sort_flag = ksort( $total_arr );

メールアドレスを選択したセルに紐付けるために、という配列を作った。
元の配列は、メールにセルデータが複数入っているんだけど、逆にセルにメールアドレスを紐付けた。要は入れ替えたかったんすよね。

期待通りに動いたなと思ってたら、1つのセルに同じメールアドレスが複数並んでしまった。。

array (size=3)
  'a-01' => 
    array (size=2)
      'email' => 
        array (size=2)
          0 => string 'test@testhage.com' (length=16)
          1 => string 'test@testhage.com' (length=16)
      'post_id' => int 407
  'a-03' => 
    array (size=2)
      'email' => 
        array (size=3)
          0 => string 'test@testhage.com' (length=16)
          1 => string 'test@testhage.com' (length=16)
          2 => string 'test@testhage.com' (length=16)
      'post_id' => int 405
  'a-04' => 
    array (size=2)
      'email' => 
        array (size=3)
          0 => string 'test@testhage.com' (length=16)
          1 => string 'test@testhage.com' (length=16)
          2 => string 'test@testhage.com' (length=16)
      'post_id' => int 405

…こんな感じ。。
重複ないように入れないとマズイんだけど、しばらくわからなかった…😅
できあがった、$total_arrをforeachで回してarray_uniqueでとかいろいろやったんだけど、イマイチしっくりこなかった。。

で、ようやくわかったのがコレ↓↓

$total_arr = array();
$key_arr_count = count( $key_arr );
for ( $h = 0; $h < $key_arr_count; $h++ ) {

  if ( ! array_key_exists( $key_arr[ $h ], $total_arr ) ) {
  
    $total_arr[ $key_arr[ $h ] ]['email'] = (array) $mail_arr[ $h ];
    
  } else {

    if ( ! in_array( $mail_arr[ $h ], $total_arr[ $key_arr[ $h ] ]['email'] ) ) {

      $total_arr[ $key_arr[ $h ] ]['email'][] = $mail_arr[ $h ];

    }

  }

  $total_arr[ $key_arr[$h]]['post_id'] = $post_id_arr[ $h ];

}

配列作るときにやればいいじゃない!!ってのに気づくの遅いよ (*_*)
で、無事期待通りに出るようになった ↓↓

array (size=3)
  'a-01' => 
    array (size=2)
      'email' => 
        array (size=2)
          0 => string 'test@hagechirakasi.com' (length=22)
          1 => string 'test@testhage.com' (length=16)
      'post_id' => int 407
  'a-03' => 
    array (size=2)
      'email' => 
        array (size=2)
          0 => string 'test@hagechirakasi.com' (length=22)
          1 => string 'test@testhage.com' (length=16)
      'post_id' => int 405
  'a-04' => 
    array (size=2)
      'email' => 
        array (size=2)
          0 => string 'test@hagechirakasi.com' (length=22)
          1 => string 'test@testhage.com' (length=16)
      'post_id' => int 405
めでたし、めでたし 😀

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA