PHPで重複しているKeyを列挙する方法
- PHPの配列で同一の値をもつKeyを列挙する方法について説明します。
- array_uniqueを使用すると重複した値を排除することができますが、重複しているKeyを列挙したい場合はどうすれば良いでしょうか?
- 例えば、東京が重複しているKeyは住所1と住所2であり、大阪が重複しているKeyは住所3と住所4です。このような重複しているKeyを表示する方法を紹介します。
- ベストアンサー
PHPで配列で同一の値をもつKeyを列挙する
$list["住所1"]="東京"; $list["住所2"]="東京"; $list["住所3"]="大阪"; $list["住所4"]="大阪"; $list["住所5"]="北海道"; と合った場合に、重複排除にarray_uniqueを使うと思いますが、 重複排除ではなく、重複しているKeyを列挙したい場合はどうすればシンプルでしょうか? 今回の例で言えば、値 東京で重複しているのが住所1、住所2で 大阪で重複しているのが 住所3,住所4であるということを表示したいと思っています。 得た値のフォーマットとしては例えば $dup["東京"] = array("住所1","住所2"); $dup["大阪"] = array("住所3","住所4"); のようにできたら便利です。
- sarusearch
- お礼率73% (101/137)
- PHP
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
array_flipという関数がありますが,これは重複要素を削除してしまうので手動でループするしか無さそうです…残念… $dup = []; foreach ($list as $key => $value) { $dup[$value][] = $key; } $dup = array_filter($dup, function ($items) { return count($items) > 1; });
関連するQ&A
- 空の配列を削除して、詰めていく。
データベースから値を取ってくるとき、全て、同じ値が入ってくる場合があります。 $a = array(100,100,100,100,100)というような。 これを、array_uniqueで重複している値を削除したのですが、その際、print_rで見ると、 Array ( [4] => 100 ) と表示されました。つまり、キーが0ではなく、4となってしまっています。 array_uniqueで帰ってきた値が複数なら、さらにsortすることで0から始まる配列として並び替えられるのですが、1つしか帰ってこないとsortをしても、キーは変わらないようです。 この値を表示させるとき、countで配列の数を数え、さらにfor文でcountの数だけ回し、print $i;で表示させるようにしているのですが、上記のようにarray_uniqueで1つの値しか帰ってこないと、ページに値がきちんと表示できなくなってしまいます。 これを解決するために、空の要素を削除して、空白でない要素のキーを前に詰めてくれるような関数などを探しているのですが、何か方法などありますでしょうか? Array ( [4] => 100 ) が Array ( [0] => 100 )となるようにしたいのです。 よろしくお願いいたします。
- 締切済み
- PHP
- 配列で特定キーが同じ値だった場合のみ、特定キー連結
■修正前 ・下記のような配列があるとき [0] => Array ( [id] => 1 [pre] => '東京' [pre_id] => 7 [rank] => A ) [1] => Array ( [id] => 1 [pre] => '大阪' [pre_id] => 2 [rank] => A ) [2] => Array ( [id] => 4 [pre] => '名古屋' [pre_id] => 3 [rank] => B ) ■修正後 ・同じidがあったときだけ(3つ以上の可能性もあり)、[pre] [pre_id]をまとめたい(それ以外のキーと値は同じ) [0] => Array ( [id] => 1 [pre] => '東京','大阪' [pre_id] => 7,2 [rank] => A ) [1] => Array ( [id] => 4 [pre] => '名古屋' [pre_id] => 3 [rank] => B )
- ベストアンサー
- PHP
- 2つの配列から新しい配列を作成したい
「Array A B」より「Array C」を作成したいのですが、どうしたらいいでしょうか? ※「Array A」キーと「Array B」idキーの値を結び付けたい Array A ( [3] => 3 [1] => 15 [4] => 3 [2] => 6 ) Array B ( [0] => Array ( [id] => 1 [area] => 東京 ) [1] => Array ( [id] => 2 [area] => 大阪 ) ) ↓ Array C ( [0] => Array ( [1] => 15 [area] => 東京 ) [1] => Array ( [2] => 6 [area] => 大阪 ) )
- ベストアンサー
- PHP
- 【VBA】セルに含まれない値を追加していく
VBA初心者です あるリストの、指定の列の重複しない値のリストを作成したいのですが 具体的には A B C 1 大阪 りんご 10 2 東京 りんご 20 3 東京 りんご 30 4 名古屋 ごりら 40 5 福岡 ごりら 50 6 大阪 らっぱ 60 指定のセル内(E1:E10)にA列の重複しないリスト (この例だと、大阪、東京、名古屋、福岡) を作成したいのです いくつか試してみたけれどうまくいきません どのようなVBAを作成すればよいでしょうか よろしくお願いいたします
- ベストアンサー
- その他MS Office製品
- 配列中のあるキー、値を取得して、それを変更したい
やりたいことは、 $hoge = array ( 0 => '1', 1 => '2', 2 => '3', 3 => '3', 4 => '3' ); のような配列があったとします。 この配列の値の出現頻度を調べて、 $hoge_syutugen_hindo = array_count_values($hoge); print_r($hoge_syutugen_hindo); $hoge_syutugen_hindoの結果 Array ( [1] => 1 [2] => 1 [3] => 3 ) $hoge_syutugen_hindoの結果で[3]の出現頻度が3回以上あったら、 Array ( [1] => 1 [2] => 1 [3] => 3 ) を Array ( [1] => 1 [2] => 1 [4] => 1 ) に変更。 少ない場合は Array ( [1] => 1 [2] => 1 [3] => 2 ) を Array ( [1] => 1 [2] => 1 [3] => 2 ) そのままの配列を返したいのです。 $hogeの配列の値には必ずしも1や2が含まれるわけではありません。 $hoge = array ( 0 => '3', 1 => '3', 2 => '3' ); や$hoge = array ( 0 => '1', 1 => '3', 2 => '3', 3 => '3' ); のようなパターン等もあります。 わたしなりに下記のようなスクリプトを作成しましたが、 $arr_pattern = '/^(3\s=>\s)[3-99]$|^(3=>)[3-99]$|^(3=>\s)[3-99]$|^(3\s=>)[3-99]$|^(3\s=>\s)\'[3-99]\'$|^(3=>)\'[3-99]\'$|^(3=>\s)\'[3-99]\'$|^(3\s=>)\'[3-99]\'$|^(\[3\]\s=>\s)[3-99]$|^(\[3\]=>)[3-99]$|^(\[3\]=>\s)[3-99]$|^(\[3\]\s=>)[3-99]$|^(\[3\]\s=>\s)\'[3-99]\'$|^(\[3\]=>)\'[3-99]\'$|^(\[3\]=>\s)\'[3-99]\'$|^(\[3\]\s=>)\'[3-99]\'$/'; reset($deliyery_kind_syutu); while(list($k, $v) = each($deliyery_kind_syutu)) { $kv = "$k=>$v"; if(preg_match($arr_pattern, $kv)){ $new_hkv = preg_replace($arr_pattern,'4 => 1', $kv); $n = count($deliyery_kind_syutu); for($i=0; $i<$n; $i++){ $new_array[] = ($deliyery_kind_syutu[$i]); } $new_array[] = $new_hkv; } } array ( 0 => NULL, 1 => 1, 2 => 1, 3 => '4 => 1', )となり、array(1 => 1, 2 => 1, 4 => 1)のような結果になりませんでした。 分かる方が見えましたらご教授ください。
- ベストアンサー
- PHP
- excel2003の、値抽出方法について。
写真のように、A列に重複しているリストがあります。 C列に重複を排除したリストを作成する場合。 どのようにすればいいでしょうか。 VBAで記述した場合の方法と、関数の場合の方法とで それぞれ教えていただけるとありがたいです。
- ベストアンサー
- Excel(エクセル)
- 多次元配列の重複削除
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
- foreachで多次元配列を生成
こんにちわ。 配列をforeachでループさせて、それを多次元配列に入れていくことは可能でしょ うか? 例えば以下のようなデータがあるとします。 ---meibo.dat-------- c21<>田中<>21<>東京 c22<>佐藤<>22<>大阪 -------------------- ---test.php----------------------------------------------------- <? $list_meibo = file("meibo.dat"); foreach($list_meibo as $temp){ $i=split("<>",$temp); $a=array($i[0] => array("name"=>$i[1],"age"=>$i[2],"ad"=>$i[3]),); } ?> ------------------------------------------------------------------- これでは $a=array("c21"=>array("name"=>"田中","age"=>"21","ad"=>"東京"), "c22"=>array("name"=>"佐藤",age"=>"21","ad"=>"大阪"),); という具合になってくれないでしょうか? これでいくと、配列の最後の要素のみデータに残ります。 どのようにしたらよいでしょうか? ご教授お願いします。
- ベストアンサー
- PHP
- PHPを使ったPOSTについて教えてください。
<body> <form action="" method="post"> <select id="list" name="list" > <option value="">選択してください</option> <option value="ichigo">いちご</option> <option value="orange">オレンジ</option> </select> <input type="text" size="30" id="word" name="word" > <input type="submit" value="検索"> </form> <?php $array = array(); $array['green'] = 'グリーン'; $array['red'] = 'レッド'; if (isset($_REQUEST['word'])) { $array ['key']=$_REQUEST['word']; } if (isset($_REQUEST['list'])) { $array ['List']=$_REQUEST['list']; } print_r($array); ?> </body> これを表示した場合、はじめのページでは Array ( [green] => グリーン [red] => レッド ) と表示されますが、フォームを実行すると、このように表示されます。 Array ( [green] => グリーン [red] => レッド [key] => [List] => ) これを、もしkeyやListの値が何も入力されなかった場合、listで言えば「選択してください」が選択されで実行された場合、[key] =>や [List] =>を表示しないと言うことはできますか? 例えばlistをデフォルトの「選択してください」のまま選択せず、テキスト欄に「テキスト」と入力したら、 Array ( [green] => グリーン [red] => レッド [key] => テキスト) とこのように[List] =>は省きたいです。 そのためにissetを使ったつもりでしたが、うまくいきませんでした。 どうしたら良いでしょうか?教えてください、よろしくお願いします。
- 締切済み
- PHP
お礼
サンプルまで提示していただきありがとうございました。 参考にさせていただきます。