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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1741閲覧

指定idは保持しつつ、連想配列で重複している値の削除

blacksanta

総合スコア23

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2016/01/18 11:49

下記のような配列を特定の[id]は保持しつつ、
[score]が重複しているものを削除したい場合、どうしたらよいでしょうか?

lang

1Array 2( 3 [0] => Array 4 ( 5 [id] => 20 6 [score] => 1 7 ) 8 9 [1] => Array 10 ( 11 [id] => 17 12 [score] => 0.75 13 ) 14 15 [2] => Array 16 ( 17 [id] => 3 18 [score] => 0.5 19 ) 20 21 [3] => Array 22 ( 23 [id] => 4 24 [score] => 0.25 25 ) 26 27 [4] => Array 28 ( 29 [id] => 9 30 [score] => 0.25 31 ) 32 33 [5] => Array 34 ( 35 [id] => 8 36 [score] => 0 37 ) 38 39 [6] => Array 40 ( 41 [id] => 13 42 [score] => 0 43 ) 44 45)

例えば、[id]=4 を保持し、ほか重複は削除する場合。

lang

1Array 2( 3 [0] => Array 4 ( 5 [id] => 20 6 [score] => 1 7 ) 8 9 [1] => Array 10 ( 11 [id] => 17 12 [score] => 0.75 13 ) 14 15 [2] => Array 16 ( 17 [id] => 3 18 [score] => 0.5 19 ) 20 21 [3] => Array 22 ( 23 [id] => 4 24 [score] => 0.25 25 ) 26 27 [4] => Array 28 ( 29 [id] => 8 30 [score] => 0 31 ) 32 33)

[id]=9 を保持し、ほか重複は削除する場合は

lang

1Array 2( 3 [0] => Array 4 ( 5 [id] => 20 6 [score] => 1 7 ) 8 9 [1] => Array 10 ( 11 [id] => 17 12 [score] => 0.75 13 ) 14 15 [2] => Array 16 ( 17 [id] => 3 18 [score] => 0.5 19 ) 20 21 [3] => Array 22 ( 23 [id] => 9 24 [score] => 0.25 25 ) 26 27 [4] => Array 28 ( 29 [id] => 8 30 [score] => 0 31 ) 32 33)

このようなことをしたい場合どうすればよいでしょうか?
色々検索してみて調べたのですが、具体的にどのようにすれば良いのかがわかりません。

何卒宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

PHP

1 array_values( array_filter( $a, function ( $v ) { 2 static $tmp = array(); 3 $ret = in_array( $v[ 'score' ], $tmp ); 4 array_push( $tmp, $v[ 'score' ] ); 5 return !$ret; 6}) );

投稿2016/01/18 12:03

yuux01

総合スコア34

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

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

blacksanta

2016/01/19 04:08 編集

回答ありがとうございます。 $aに配列を代入して試してみたところ Array ( [0] => Array ( [id] => 20 [score] => 1 ) [1] => Array ( [id] => 17 [score] => 0.75 ) [2] => Array ( [id] => 3 [score] => 0.5 ) [3] => Array ( [id] => 4 [score] => 0.25 ) [4] => Array ( [id] => 8 [score] => 0 ) ) となりました。重複の削除はされたのですが 同じ[score]の重複でも[id]=9を残して[id]=4が削除されるように したい場合はどうすればいいですか?
FKM

2016/08/22 06:21

横から失礼します。けっこう強引なやり方ですが… $a = array_reverse($a,true); $a = array_values( array_filter( $a, function ( $v ) { static $tmp = array(); $ret = in_array( $v[ 'score' ], $tmp ); array_push( $tmp, $v[ 'score' ] ); return !$ret; }) ); $a = array_reverse($a); 検索前に一度配列の並びを逆転させれば、処理の順序も変わります。その後、もう一度、元に戻せば、重複した後の値の方が残ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問