入力されたタグを重複がないように格納したいです。
下記のようなコードでいけるかなと思ったのですが
重複して格納されてしまっているので困っています。
どなたか解決方法をご教示ください、よろしくお願いします。
//追記
PHP: array_uniqueについて
array_uniqueは、ループの最中ではなくループの外でまとめて重複の削除をする際につかったほうがよさそう...?
//再追記
↑のような場合もあるとは思いますが、今回は完全に私の初歩的なミスです。
array_pushした後に重複の削除をしないとうまくうごきません。
ご回答いただいた方々この場で感謝申し上げます。
php
1 preg_match_all('/#([a-zA-Z0-90-9ぁ-んァ-ヶー一-龠]+)/u', $request->body, $match); 2 3 $tags = []; 4 5 foreach ($match[1] as $tag) { 6 $record = Tag::firstOrCreate(['tag_name' => $tag]); 7 $tags = array_merge(array_unique($tags)); 8 array_push($tags, $record); 9 }
入力 #aa #bb #cc #aa #bb array:4 0 => aa 1 => bb 2 => cc 3 => bb
array_unique array_push 処理の順番が逆でしょう
完全にこれですね・・・
初歩的なミスですがご指摘いただいてありがとうございます。
指摘されると当たり前のように感じますが全然気づいていませんでした。
ベストアンサーにしたいです。
出されたコードだけで判断するなら、正解ということになると思うけど、そもそもですが、DBの設計まずいだろうと思っています。
tags テーブルの tag_name に unique 属性ついていないだろうとも推測できるし。前提から指摘するのも回答者としては面倒…
おっしゃる通りです。初心者なので至らぬ点が多いですが
勉強して少しずつ改善を重ねていこうと思います。
ご指摘ありがとうございました。
一旦この質問は自己回答で閉じさせていただきます。
回答3件
あなたの回答
tips
プレビュー