PHPの多次元配列の重複削除について

このQ&Aのポイント
  • PHPの多次元配列の重複削除について悩んでいます。array_unique($array)を使用してもうまく行かず、どのようにすれば重複を削除できるのかわかりません。
  • 与えられた例では、重複している要素が「冬」のみであることが分かります。重複を削除するためには、配列の要素を順番に比較して重複しているものを削除する方法があります。
  • 具体的な実装としては、配列の要素を1つずつ取り出し、重複チェックを行います。重複している要素が見つかった場合、その要素を削除します。これを全ての要素に対して行うことで、重複を削除することができます。
回答を見る
  • ベストアンサー

多次元配列の重複削除

PHPの多次元配列の重複削除で悩んでいます・・・。 例) array(4) { [0]=> array(2) { ["name"]=>string(10) "春" ["cool"]=>int(0) } [1]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(200) } [2]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(0) } [3]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(200) } } 上記のような配列があった場合 下記のように重複してるものを削除させたいのです・・・。 array(4) { [0]=> array(2) { ["name"]=>string(10) "春" ["cool"]=>int(0) } [1]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(200) } [2]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(0) } } array_unique($array)を使用してもうまく行かず 悩んでおります。。。。 よい方法等あればご教授お願いいたします。

  • PHP
  • 回答数1
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • explode
  • ベストアンサー率100% (6/6)
回答No.1

初めまして。 少し力技ですが・・・ $data = array( array("name" => "春", "cool" => "0"), array("name" => "冬", "cool" => "200"), array("name" => "冬", "cool" => "0"), array("name" => "冬", "cool" => "200") ); // 検証用配列 $tmp = array(); foreach($data as $key => $val){ // 検証用配列に値が見つからなければ$tmpに格納 if(!in_array($val,$tmp)){ $tmp[] = $val; } } $data = $tmp; いかがでしょう?

mouages
質問者

お礼

ご回答ありがとうございます!! できました! 大変助かりました、ありがとうございました。

関連するQ&A

  • 多次元配列で特定キーが重複している箇所をランダムで

    PHP多次元配列で特定キーが重複している箇所をランダムで1つだけ表示したい ・id基準 ■元配列 Array (   [0] => Array     (       [id] => 5       [name] => "佐藤"       [age] => 5     )   [1] => Array     (       [id] => 5       [name] => "伊藤"       [age] => 7     )   [2] => Array     (       [id] => 5       [name] => "鈴木"       [age] => 12     )   [3] => Array     (       [id] => 8       [name] => "山田"       [age] => 17     )   [4] => Array     (       [id] => 8       [name] => "奈良"       [age] => 2     ) ■取得したいランダム結果配列例1 Array (   [0] => Array     (       [id] => 5       [name] => "佐藤"       [age] => 5     )   [3] => Array     (       [id] => 8       [name] => "山田"       [age] => 17     ) ■取得したいランダム結果配列例2 Array (   [1] => Array     (       [id] => 5       [name] => "伊藤"       [age] => 7     )   [4] => Array     (       [id] => 8       [name] => "奈良"       [age] => 2     ) ※1次元目のキーは元キーを維持していなくても構いません

    • ベストアンサー
    • PHP
  • 2次元配列の値の受け渡しについて教えてください

    お世話になります。 phpで2次元配列の値の受け渡しについて教えてください。 A.phpファイルからB.phpファイルに2次元配列の値を渡したいと考えています。 出来ればPOSTで2次元配列を送りたいと考えていますが、そもそもPOSTで2次元配列を送ることはできるのでしょうか? たとえば [A.php] $DATA = array( array('name'=>"tanaka", 'age'=>"20"), array('name'=>"sasaki", 'age'=>"30"), ); をB.phpファイルに送るにはどうすれば良いのでしょうか? どなたか教えて頂けないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 多次元配列のカウント+1の仕方

    多次元配列のカウント+1の仕方 下記のような多次元配列(ちなみに、これって二次元配列ですか?)があるとき、 常に、「2列目の0がある数+1」を返すようにしたいのですが、 どうすればよいのでしょうか? $data[0][1]とか$data[1][1]とか$data[2][1]とかの意味です。 下記の例でいくと、2列目に0が3つあるので、数値の4を返したいのですが…、 ■$data 1,0,A1,B1,C1 2,0,A2,B2,C2 3,0,A3,B3,C3 4,2,A4,B4,C4 ■var_dump($data); array(4) { [0]=> array(5) { [0]=> string(1) "1" [1]=> string(1) "0" [2]=> string(2) "A1" [3]=> string(2) "B1" [4]=> string(2) "C1" } [1]=> array(5) { [0]=> string(1) "2" [1]=> string(1) "0" [2]=> string(2) "A2" [3]=> string(2) "B2" [4]=> string(2) "C2" } [2]=> array(5) { [0]=> string(1) "3" [1]=> string(1) "0" [2]=> string(2) "A3" [3]=> string(2) "B3" [4]=> string(2) "C3" } [3]=> array(5) { [0]=> string(1) "4" [1]=> string(1) "2" [2]=> string(2) "A4" [3]=> string(2) "B4" [4]=> string(2) "C4" } }

    • ベストアンサー
    • PHP
  • 多次元配列を2次元の連想配列で表したい

    PHP初心者です。 $category = array( array( 'ライフ' ), array( 'デジタルライフ', array( '携帯・PHS' ), array( 'ワンセグ放送' ) ), array( '趣味', array( 'AV機器', array( 'オーディオ' ), ), ), ); このような多次元配列を $new_category = array( array( 'id'=> '1', 'parent_id' => '-', 'name' => 'ライフ', ), array( 'id'=> '2', 'parent_id' =>'-', 'name' => 'デジタルライフ', ), array( 'id'=> '3', 'parent_id' => '2', 'name' => '携帯・PHS', ), array( 'id'=> 4, 'parent_id' => '2', 'name' => 'ワンセグ放送', ), array( 'id'=> 5, 'parent_id' => '-', 'name' => '趣味', ), array( 'id'=> '6', 'parent_id' => '5', 'name' => 'AV機器', ), ); このような二次元配列に変換したいです。 parent_idを入れておく配列を作って、階層が深くなったら前の要素のIDを配列に入れ、浅くなったら配列の末尾の要素を消去する…みたいなことを考えてあれこれやってみたのですが、なかなかうまくいきません。 何か良い方法がありましたら、教えていただけるとありたがいです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 多次元配列のソートがうまくいかない

    多次元配列のソートがうまくいかない 質問失礼します. 以下のような,String型,int型,double型の混在した多次元配列([3][3]の配列)をソートするプログラムを作成しました. このプログラムでは3番目の項目でソートを行っています. 問題点なのですが, 3番目の項目がdouble型の一桁(例えばarray[1][2]が2.0)ならばうまくソートできるのですが, 一つを2桁(例えばarray[1][2]を10.0)にすると何故か先頭の数(10.0の場合1)を基準にソートされてしまっているようです・・・ 配列へのデータの入れ方が間違っているのでしょうか? 原因がはっきりわからず困っているのですが, わかる方いましたらよろしくお願いします. public class Sort_test { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ String[][] array = new String[3][3]; array[ 0 ][ 0 ] = "A"; array[ 0 ][ 1 ] = 2001+""; array[ 0 ][ 2 ] = 9.0+""; array[ 1 ][ 0 ] = "B"; array[ 1 ][ 1 ] = 1001+""; array[ 1 ][ 2 ] = 2.0+""; array[ 2 ][ 0 ] = "C"; array[ 2 ][ 1 ] = 3001+""; array[ 2 ][ 2 ] = 6.0+""; TheComparator comparator = new TheComparator(); // 3番目の項目でソートするように設定 comparator.setIndex( 2 ); // ソート実施 Arrays.sort( array, comparator ); dump(array); } public static void dump( String[][] array ) { for ( int i = 0;i < array.length;i++ ) { for ( int j = 0; j < array[ i ].length;j++ ) { System.out.print( "\t" + array[ i ][ j ] ); } System.out.println(); } } } //多次元配列ソート用クラス class TheComparator implements Comparator { /** ソート対象のカラムの位置 */ private int index = 0; /** ソートするためのカラム位置をセット */ public void setIndex( int index ) { this.index = index; } public int compare( Object a, Object b ) { String[] strA = ( String[] ) a; String[] strB = ( String[] ) b; return ( strA[ index ].compareTo( strB[ index ] ) ); } }

    • ベストアンサー
    • Java
  • 多次元配列の入れ替え

    いつもお世話になります。 PHPで多次元配列の入れ替えについて悩んでおります。 以下のようなデフォルトの配列から、整形後の配列 へ変換したいのですが、どのように扱ってよいか 頭が回らず困っています。 2次元目のクラスが等しいもののidをキーとして、 名前を値としたいのですが。。。 どうぞ宜しくお願いします(>へ<) //デフォルトの配列 Array (   [0] => Array     (       [id] => 1       [class] => A       [name] => 佐藤     )   [1] => Array     (       [id] => 2       [class] => A       [name] => 山下     )   [2] => Array     (       [id] => 3       [class] => B       [name] => 田中     )   [3] => Array     (       [id] => 4       [class] => B       [name] => 高橋     ) ) //整形後の配列 Array (   [A] => Array     (       [1] => 佐藤       [2] => 山下     )        [B] => Array     (       [3] => 田中       [4] => 高橋     )      )

    • ベストアンサー
    • PHP
  • 2次元配列を多次元配列にする。

    2次元配列を多次元配列にする。 PHP5で 2次元目はすべて同じキーの2次元配列を 2次元目のキーごとの内容を共通項にまとめて、 多次元配列にする方法を教えてください。 キーの数は膨大なので、関数の再帰呼び出し で、きれいに処理したいのです。 説明文では説明しきれないので、 やりたいことは↓の通りです。 array[0] = array([one] => "あ", [twe] => "う" [three] => "き"); array[1] = array([one] => "あ", [twe] => "う" [three] => "く"); array[2] = array([one] => "あ", [twe] => "え" [three] => "け"); array[3] = array([one] => "あ", [twe] => "え" [three] => "こ"); array[4] = array([one] => "い", [twe] => "お" [three] => "さ"); array[5] = array([one] => "い", [twe] => "お" [three] => "し"); array[6] = array([one] => "い", [twe] => "か" [three] => "す"); array[7] = array([one] => "い", [twe] => "か" [three] => "せ"); という配列があったら、これを↓のようにしたいです。 array( [あ] => array( [う] => array ("き", "く") [え] => array ("け", "こ") ) [い] => array( [お] => array ("さ", "し") [か] => array ("す", "せ") )   ) どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • フォームを通さずに2次元配列の値の受け渡しについて教えてください

    お世話になります。 以前にも質問させて頂きましたが、うまくいかずもう1度質問させてください。 phpで2次元配列の値の受け渡しについて教えてください。 A.phpファイルからB.phpファイルに2次元配列の値をフォームを通さずにPOSTで渡したいと考えています。 処理上、2次元配列のままB.phpファイルに値を渡したいと考えています。 そもそもPOSTで2次元配列を送ることはできるのでしょうか? その他の方法で2次元配列のままB.phpファイルに渡すことが出来るのであれば、その方法も教えて頂きたいのですが。 たとえば [A.php] $DATA = array( array('name'=>"tanaka", 'age'=>"20"), array('name'=>"sasaki", 'age'=>"30"), ); をB.phpファイルに送るにはどうすれば良いのでしょうか? ※2次元配列のサイズは可変です。 どなたか教えて頂けないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 多次元配列

    初歩的な質問ですみません。 PHPプログラミングでの質問です。 仮に、多次元配列Aに、 Array( [0] => Array ( [0] => 6 ) [1] => Array ( [0] => 2 [1] => 1 ) [2] => Array ( [0] => 0 [1] => 5 [2] => 4 ) ) 多次元配列Bに、 Array( [0] => Array ( [0] => りんご ) [1] => Array ( [0] => ぶどう [1] => パイナップル ) [2] => Array ( [0] => みかん [1] => すいか [2] => メロン ) ) のように値が入っている場合、配列Aの値を参照して 値の大きいものから順に、それに対応する配列Bの値を取り出し、 あたらしい配列Cに代入する処理の書き方を教えて下さい。 上記の例ですと、配列Cが、 Array ( [0] => りんご [1] => すいか [2] => メロン [3] => ぶどう [4] => パイナップル [5] => みかん ) となるようにしたいです。 よろしくお願いします。 長文失礼しました。

    • ベストアンサー
    • PHP
  • php 重複した配列の削除

    重複する配列を削除した結果を取得したいのですがうまくいきません。 値が必ずしも同様の位置にセットされていないため重複削除ができずに困っております。 Array ( [0] => tag1 [1] => tag4 [2] => tag2 [3] => tag3 ) Array ( [0] => tag4 [1] => tag3 [2] => tag2 [3] => tag1 ) Array ( [0] => tag5 [1] => tag6 ) 上記の重複した値を削除して、下記のように処理したいのですが、、、 Array ( [0] => tag1 [1] => tag4 [2] => tag2 [3] => tag3 ) Array ( [0] => tag5 [1] => tag6 ) 宜しくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう