質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

336閲覧

指定キーのみでの重複チェックをしたい[PHP]

aaa1026

総合スコア20

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2022/01/24 04:53

連想配列で、指定したキーのみの重複をチェックしたいです。

PHP

1$ary = [ 2 3 [ 4 'name' => '田中' 5 'age' => 20 6 'birthday' => 2000/1/1 7 ], 8 9 [ 10 'name' => '田中' 11 'age' => 20 12 'birthday' => 1999/12/31 13 ], 14 15 [ 16 'name' => '佐藤' 17 'age' => 20 18 'birthday' => 2000/1/1 19 ] 20 21]

このような配列がある場合に、nameとageのみの重複をチェックし
結果として、上二つが引っかかるような処理にしたいと考えています。
array_unique()のような配列全体の比較ではなく、指定したキーのみでの比較をしたいのですが可能なのでしょうか。前提から直すべきなのでしょうか。
宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2022/01/24 05:37

一致するものがあったときにどうしたいかによります
aaa1026

2022/01/25 08:44

ありがとうございます。 このような配列をループで回し、name,ageが一致しない場合そのままinsし、一致した場合continueとしたいです。
yambejp

2022/01/25 09:16

> name,ageが一致しない場合そのままinsし、一致した場合continueとしたい 説明の意味がわかりません
guest

回答2

0

ベストアンサー

こんな感じで

PHP

1<?PHP 2$a = [ 3 [ 4 'name' => '田中', 5 'age' => 20, 6 'birthday' => '2000/1/1', 7 ], 8 [ 9 'name' => '田中', 10 'age' => 20, 11 'birthday' => '1999/12/31', 12 ], 13 [ 14 'name' => '佐藤', 15 'age' => 20, 16 'birthday' => '2000/1/1', 17 ], 18 [ 19 'name' => '田中', 20 'age' => 19, 21 'birthday' => '1999/12/31', 22 ], 23 [ 24 'name' => '田中', 25 'age' => 20, 26 'birthday' => '1999/12/31', 27 ], 28 ]; 29$b=array_reduce($a,function($x,$y){ 30 if($num=array_filter(array_keys($x),function($z) use($x,$y) { 31 return $x[$z]["name"]==$y["name"] and $x[$z]["age"]==$y["age"]; 32 })){ 33 $x[array_shift($num)]["count"]++; 34 }else{ 35 $x[]=["name"=>$y["name"],"age"=>$y["age"],"count"=>1]; 36 } 37 return $x; 38},[]); 39print_r($b);//重複があるものはcountが2以上になります

投稿2022/01/24 06:02

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

nameage でグループ化してみます。

php

1<?php 2 3$ary = [ 4 [ 5 'name' => '田中', 6 'age' => 20, 7 'birthday' => '2000/1/1' 8 ], 9 [ 10 'name' => '田中', 11 'age' => 20, 12 'birthday' => '1999/12/31' 13 ], 14 [ 15 'name' => '佐藤', 16 'age' => 20, 17 'birthday' => '2000/1/1' 18 ] 19]; 20 21// group by name and age 22$grp = array(); 23foreach ($ary as $arr) { 24 $grp[$arr['name']][$arr['age']][] = $arr; 25} 26 27// extract duplicates 28$duplicates = []; 29foreach ($grp as $i) { 30 foreach ($i as $j) { 31 if (count($j) > 1) { 32 $duplicates[] = $j; 33 } 34 } 35} 36 37print_r($duplicates); 38 39# 40Array 41( 42 [0] => Array 43 ( 44 [0] => Array 45 ( 46 [name] => 田中 47 [age] => 20 48 [birthday] => 2000/1/1 49 ) 50 51 [1] => Array 52 ( 53 [name] => 田中 54 [age] => 20 55 [birthday] => 1999/12/31 56 ) 57 58 ) 59 60)

投稿2022/01/24 05:46

melian

総合スコア19767

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問