やりたいこと
ジャズライブの口コミをタグ付きで投稿できるサイトを、チームで開発しています。
タグが送信された時に、配列の中に2つ以上同じ文字列があったら、前者だけを残して他を削除し、配列内の値が全てユニークである状態を作るプログラムを作りたくルンルン楽しく試行錯誤していたら、array_unique()
というPHPの便利なビルトイン関数があることを知り、便利と思いつつちょっと萎えました。なら無駄に自作してみっか!と思い作ってみました。
**YouTube万屋エンジニアチャンネル**のコミュニティーで大いに助けていただきました。大感謝!
やってみた
試行錯誤しましたが、下記でarray_unique()と同じ結果が得られます。
<?php
$tags = ['jazz', 'onuma', 'fusion', 'jazz', 'fusion', 'fusion', 'tokyo'];
$unique_tags = array(); //(1)unique_tagsを配列にする
foreach ($tags as $key=>$val) { //(2)後述
$unique_tags[$val] = true;
}
$unique_tags = array_keys($unique_tags); //(3)配列のkeyを返す
print_r($unique_tags);
//出力↓
Array
(
[0] => jazz
[1] => onuma
[2] => fusion
[3] => tokyo
)
(1)は結構誰でもわかると思います。
(2)は初心者の私にはトリッキーでしたが、
a. まずforeachで配列$tags
をキーを$key
、値を$val
と名前を付けて一つずつ処理すると()内で宣言。
b. (1)で配列化した$unique_tags
のキーに$tags
の値の方を渡し、連想配列化し、その値には定数trueを代入。連想配列とは、キーを数字ではなく文字列にして管理する配列。
c. キーの重複は不可能なので、自然とbの時点で、重複するtagsの値は弾かれる。
d. この時点で$unique_tagsは下記のようになっています。
Array
(
[jazz] => 1
[onuma] => 1
[fusion] => 1
[tokyo] => 1
)
(3)array_keysで配列のキーを配列で返します。
最後に
ご指摘や他のやり方を知ってるという方いましたら、ぜひコメントにてよろしくお願い申し上げます、