Help us understand the problem. What is going on with this article?

PHP:ビルトイン関数array_unique()を自作してみた

やりたいこと

ジャズライブの口コミをタグ付きで投稿できるサイトを、チームで開発しています。
タグが送信された時に、配列の中に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で配列のキーを配列で返します。

最後に

ご指摘や他のやり方を知ってるという方いましたら、ぜひコメントにてよろしくお願い申し上げます、

kakudaisuke
フランス語を話すなどするプログラミング初心者です。Qiitaは自分が学習したことのアウトプットの場として重宝しています。
https://note.com/kakudaisuke
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away