配列の重複を削除後、削除分の値を加算したいのですが

このQ&Aのポイント
  • 配列の重複を削除し、削除した値を加算して並べ替える方法を教えてください。
  • 具体的には、同じURLを持つ要素がある場合、重複部分を削除し、削除した値を合計して新しい配列を作りたいです。
  • また、新しい配列を作成した後は、countの値が多い順に並べ替えたいです。どのようにすれば良いでしょうか?
回答を見る
  • ベストアンサー

配列の重複を削除後、削除分の値を加算したいのですが

具体的には、下記例で、 urlが同じだったら、重複部分を削除して、 削除した[count]を、重複整理して残ったトコに加算して、 [count]数の多い順に並べ替えたいのですが、 どうすればよいでしょうか? Array (   [0] => Array     (      [url] => /hoge/piyo.html      [date] => 20110105      [count] => 4     )        [1] => Array     (      [url] => /hoge/      [date] => 20110105      [count] => 1     )        [2] => Array     (      [url] => /kiyo.html?post_id=158      [date] => 20110105      [count] => 2     )        [3] => Array     (      [url] => /blog/      [date] => 20110105      [count] => 3     )   [4] => Array     (      [url] => /kiyo.html      [date] => 20110105      [count] => 1     )        [5] => Array     (      [url] => /kiyo.html      [date] => 20110105      [count] => 2     )      なときに、 Array (   [0] => Array     (      [url] => /kiyo.html      [date] => 20110105      [count] => 5     )        [1] => Array     (      [url] => /hoge/piyo.html      [date] => 20110105      [count] => 4     )        [2] => Array     (      [url] => /blog/      [date] => 20110105      [count] => 3     )   [3] => Array     (      [url] => /hoge/      [date] => 20110105      [count] => 1     )      としたいです

  • re999
  • お礼率61% (476/777)
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1
re999
質問者

お礼

回答ありがとうございました。 書いていただいたコードが、こちらの希望通り完璧に動作してくれるので、 凄く嬉しいです。 また、コメントやアドバイスを詳しく書いていただいているので、 とても勉強になります。 本当にありがとうございました!

関連するQ&A

  • phpで配列の重複する項目を多い順に並べたいです!

    $a = array("hoge","piyo","hoge","banana","hoge","piyo"); ↓ $b = array("hoge","piyo","banana"); みたいな配列があったとき、上のように重複する項目をまとめて、 さらに多い順に並び替えるにはどのようなコードを書けば良いですか?

    • ベストアンサー
    • PHP
  • 一致する配列要素数を追加した上、重複を削除したい

    ・配列hogeがある時、idキーの数を数え、count要素として追加したい ・さらに、idキーが重複する内容を削除したい ■前提 hoge (   [0] => Array     (       [id] => 7       [area] => 6     )   [1] => Array     (       [id] => 7       [area] => 6     )   [2] => Array     (       [id] => 8       [area] => 9     ) ) ■欲しい結果 result (   [0] => Array     (       [id] => 7       [area] => 6       [count] => 2     )   [1] => Array     (       [id] => 8       [area] => 9       [count] => 1     ) )

    • ベストアンサー
    • PHP
  • 配列の重複チェック

    POSTの配列の中で、キーと要素をペアで重複チェックする方法はありますか? 要素だけならarray_count_valueなどが使えますが、キーも重複しないとだめなのです。 よろしくお願いします。

    • 締切済み
    • PHP
  • 重複レコードの一括削除

    重複データを抽出して、重複しているデータ分だけを一括で削除する事は可能でそうか。 SELECT hoge,count(*) AS count FROM テーブル GROUP BY hoge HAVING count>1 このように出せば重複データを出せたのですが、500件ほどレコードがあり、手作業では辛いです。 お力お貸しくださいませm(_ _)m よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 重複データを削除して上書きする

    data.datファイルには hoge@hoge.com, hoge1@hoge.com, hoge2@hoge.com, hoge3@hoge.com, hoge4@hoge.com, hoge5@hoge.com, hoge6@hoge.com, hoge7@hoge.com, hoge8@hoge.com, hoge9@hoge.com, hoge@hoge.com, hoge1@hoge.com, hoge2@hoge.com, hoge3@hoge.com, hoge10@hoge.com PHPファイルは↓です。 <?php //ファイルの内容を配列に格納 $lines = file( 'data.dat' ); //重複ファイル削除 $array = array_unique($lines); //配列の全要素に対して処理を行う foreach( $array as $line ){ print "$line<br>\n"; } ?> 重複したファイルを削除して表示することはできましたが、新しいデータをdata.datファイルに書き込む場合はどうしたらよいでしょうか? 重複ファイルだけdata.datファイルから削除して、削除された行を詰めて上書きしたほうがよいのでしょうか? 他に、いい方法があればアドバイス下さい。

    • 締切済み
    • PHP
  • 空の配列を削除して、詰めていく。

    データベースから値を取ってくるとき、全て、同じ値が入ってくる場合があります。 $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
  • ウェブマスターツールのURLの削除について

    ウェブマスターツールでURLを削除リクエストしたのですが、他のディレクトリも対象になるのでしょうか。 例 www.hoge.com/piyo/ piyoを削除リクエストした場合 www.hoge.com/fuga/ のサイトも対象になりますか。 よろしくお願いします。

    • ベストアンサー
    • CSS
  • 重複が

    新規登録の時の重複をチェックしたいです テーブルのカラムはシンプルにidとnameとpassだけです nameに同じ名前の人がいると困るので、HTMLフォームから送られた名前と登録してある名前の重複がないかチェックするようにできますか? やってみましたが動きません(ーー;; $name = mysql_real_escape_string($_POST['name']); $name3=array(); $name2 = mysql_query('SELECT name FROM hoge2 WHERE name=$name'); while($data = mysql_fetch_assoc($name2)) { array_push($name3, $data['name']); } if(isset($name3)){ print "重複があります"; }else{ //ここからsql $sql = sprintf('INSERT INTO hoge2 SET name="%s", pass="%s"', $name, mysql_real_escape_string($_POST['pass']) ); //ここまで mysql_query($sql) or die(mysql_error()); }

    • ベストアンサー
    • MySQL
  • 配列を抜き出し新しい配列を作りたい

    いつも参考にさせて頂いています。 今あるボタンAに function sortFunc(a, b) { return a.ID-b.ID; } hoge = new Array(); hoge.push({ID:_root.g1, a:"○○", b:"mc_maru"}); hoge.push({ID:_root.g2, a:"△△", b:"mc_sankaku"}); hoge.push({ID:_root.g3, a:"□□", b:"mc_shikaku"}); hoge.sort(sortFunc); // 結果 { } for (var i = hoge.length; i>=0; i--) { trace(hoge[i].ID+hoge[i].a+hoge[i].b); this.key_text.text +=(("\r")+hoge[i].a); } } このような配列の並び替えをしています。 _root.g1、2、3の点数を受けて点数の高い順に並び替えしてる 物を_key.textと言うダイナミックテキストに渡して表示させています。 この並び替えを利用し点数の高いものを二つを抜きだしたいのですが、 Array.slice()をどうやって使えばいいのか分からず困っています。 わかる方いらしたら教えて頂けないでしょうか?

    • ベストアンサー
    • Flash
  • JSON多次元オブジェクト(?)を配列へ変換したい

    ・下記のようなJSON多次元オブジェクト(?)を配列へ変換したいのですが、どうすれば良いでしょうか? ・json_decode試したけどうまくいきませんでした ・出来れば、data以下だけを配列で取得したいです array(1) { [0]=> string(1284) {"version":1,"req_id":null,"error":null,"data":[ {"name":"Sad","j_title":"A","id":"23","thumb":"hoge1","date":"2009","title":"Ch","url":"hoge2"}, {"name":"Wil","j_title":"r","id":"30","thumb":"hoge3","date":"2013","title":"Po","url":"hoge8"} ]} [1]=> string(1282) {"version":1,"……

    • ベストアンサー
    • PHP

専門家に質問してみよう