PHPで重複をカウントし数ごとに配列を分ける方法

このQ&Aのポイント
  • PHPの配列で重複項目をカウントし、その重複数ごとに別々の配列に格納する方法について教えてください。
  • 与えられた配列の中で、特定の要素の数をカウントし、その数に基づいて異なる配列に要素を格納する方法を知りたいです。
  • PHPで特定の要素の数をカウントし、その数に基づいて異なる配列に要素を分類する方法について教えてください。
回答を見る
  • ベストアンサー

PHPで重複をカウントし数ごとに配列を分けたいです

PHPの配列で重複項目をカウントし、その重複数ごとに別々の配列に格納したいです。 $wordに "ねこ"というワードが12個 "いぬ"というワードが8個 "うさぎ"というワードが5個 "りす"というワードが2個 入ってて 10個以上なら$wd1にワードを 5個以上、10個未満なら$wd2にワードを 入れるというようにしたいです。 $wd1 = ("ねこ"); $wd2 = ("いぬ","うさぎ"); のような感じにしたいです。 $word = array_count_values($word); if(○○○ >= 10 ){ }else if(○○○ < 10 && ○○○ >= 5 ){ } というような感じで書きたいのですが、どうしたらいいですか?

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

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

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

array_count_valuesを使うことまでわかっていて、そこから先が書けないというのが不思議なんですが(汗 // データセット $word = array('いぬ', 'いぬ', 'ねこ', 'ねこ', 'いぬ', 'ねこ', 'ねこ', 'いぬ', 'いぬ', 'いぬ', 'いぬ', 'いぬ', 'いぬ', 'いぬ', 'いぬ', 'ねこ', 'うさぎ'); // 前処理 $wd1 = array(); $wd2 = array(); $counts = array_count_values($word); // 件数ごとに格納 foreach ($counts as $val=>$cnt) { if ($cnt >= 10) { $wd1[] = $val; } else if ($cnt >= 5) { $wd2[] = $val; } } というだけですよね?

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5080/13274)
回答No.1

$word2 = array_count_values($word); $wd1 = array(); $wd2 = array(); foreach ($word2 as $Key => $Val) { if ($Val >= 10 ) { $wd1[] = $Key; } else if ($Val < 10 && $Val >= 5 ) { $wd2[] = $Key; } }

関連するQ&A

  • PHP多次元配列で重複チェック

    現在重複チェックのプログラムを制作中です。 各配列には400文字程度の文章で、75個あります。 条件文でのチェックを行うと通り数で2800通りになるので array_count_values 関数 を使おうと思っているのですが 多次元配列にして、ラベル(bunsyou1~bunsyou75)と文章を一組にして、 ラベルで重複箇所を結果として出す方法は在りますでしょうか? ご教示いただければ幸いです。

    • ベストアンサー
    • PHP
  • PHPの配列の出力について

    $loop = 5; $count = 0; while($count < $loop){ mt_srand(microtime() * 100000); $rand_key = rand(0,9); if (in_array($rand_key, $yomi)){ $count--; continue; } echo $yomi[$rand_key]\n; } 配列($yomi)に格納されたひらがなから5つ重複させずに選び出したいのですが、 randで選出された「りんご」が2度選び出された場合、これでやり直しされますか? 現在出力出来る環境がありません… 初心者ですので指摘やアドバイス等いただけると嬉しいです。 よろしくお願いします。

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

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

    • 締切済み
    • 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
  • phpで重複チェック

    phpの重複チェック phpで配列の重複データをチェックして、重複しているデータを表示しようとしています。 foreach ($arry as $key => $value) { $err_count = 0; foreach ($arry as $key => $value2) { if ($value == $value2) { $err_count++; if ($err_count >= 2) { echo "重複".$value2; } } } } としているのですが、 同じモノが2回表示されて困っています。 重複しているデータは一回だけ表示したいのですが、 なにか方法ないでしょうか?

    • ベストアンサー
    • PHP
  • 配列のカウント

    こんにちは 初歩的な質問だとは思うのですが…教えて下さい 【 1.以下のような配列を作る 】 $array = array( "1-aaa", "2-aaa", "2-bbb", "2-ccc" ); 【 2.本日の日付を取得 】 $today = date("d",time()); 【 3. arrayの件数分forで回す 】 for ($i = 0; $i < count($array); $i++) { 【 4.explodeで分解 】 $items = explode("*",$array[$i]); 【 5.日付と配列[0]が一致した時に項目表示 】 if($today == $items[0]){ print $items[1]; } という処理を行った時に if($today == $items[0]) に該当するデータ件数というのは 求めることが出来ないものなのでしょうか (今日が2日として、この場合は「3」が欲しい) 前からこういう状況下で該当する件数を求めたい時があっても どうしたらよいのかわからなくて諦めていたのです 絶対ムリなら諦めるので、出来るのかどうか教えて頂けますか?? もし可能であれば、求め方のヒントも頂けると助かります よろしくお願い致します!!

    • ベストアンサー
    • PHP
  • PHPの配列

    配列操作で行き詰まったため質問させて頂きます。 ( [0] => Array ( [order] => 39 [time] => 16 ) [1] => Array ( [time] => 17 ) [2] => Array ( [time] => 18 ) [3] => Array ( [time] => 19 ) [4] => Array ( [order] => 39 [time] => 20 ) [5] => Array ( [time] => 21 ) ) 上記のように格納されている配列を下記のように縮めたいと考えています。 ( [0] => Array ( [order] => 39 [time] => 16 ) [1] => Array ( [time] => 17-19 ) [2] => Array ( [order] => 39 [time] => 20 ) [3] => Array ( [time] => 21 ) ) 要は、[order]が無く[time]が2個以上続いている場合、始めの[time]+[-]+最後の[time](order一個手前の)のようにしたいのですが、どのようにすれば良いのか色々考えたのですが行き詰ってしまいました。 どなたかどのようなコードを書けば良いか教えて頂けないでしょうか。 ※始めの配列の並びは例です、毎回配列の中身は違います、もちろん全部[order]が入っている場合もありますし、全部[time]の場合もあります。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • クッキーに配列データを

    こんばんは。お世話になってます。 クッキーに配列データを保存したく、調べながら試行錯誤を繰り返していますが行き詰まってしまい、 アドバイスを頂戴できればと投函させて頂きます。 やりたいことは、掲示板にて書き込まれた内容をDBで管理しているのですが、各スレッドごとに1つのファイル(ページ)にて 呼び出しており、ページを閲覧した際、過去に1度でも閲覧した内容はカウント(訪問者数)せず、初めて閲覧した時のみ カウントするといった内容にしたいのですが、DBに登録されているデータも複数あることから、 DBに登録されているデータの連番を、配列データ(クッキー名:view)としてクッキーに登録しようと 考えるところまで至っていますが、うまく登録することが出来ずにいる次第です。 他にもっと適切なやり方があったら、そのご意見も頂戴したいのですが、以上のような考え方の場合、以下のスクリプトにおいて、 どこが不適切なのかをご指摘いただければ幸いにおもっております。 以下が、現在テスト中のスクリプトです。 $view_array = $_COOKIE["view[]"]; $view_array = unserialize(base64_decode($view_array)); //print_r($view_array); if(isset($_COOKIE["view[]"])){ if(!in_array($pno, $view_array)){ $count = $count+1; $sql = "update name set count = $count where no ='$pno'"; mysql_query($sql); $view_array[] = $pno; setcookie("view[]", base64_encode(serialize($view_array)), time() + 60*60*24*360, "/"); } }else{//クッキーに該当する配列がなかった場合 $count = $count+1; $sql = "update name set count = $count where no ='$pno'"; mysql_query($sql); $view_array = array($pno); setcookie("view[]", base64_encode(serialize($view_array)), time() + 60*60*24*360, "/"); } 以上、お忙しいなか恐縮ですが、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • 配列の中に複数存在する数がいくつあるか

    お世話になります。配列の中に同じ数が存在する数がいくつあるかを調べたいのですが、途中でつまづいてしまいました。 例えば配列arrayの中に、0, 0, 5, 0, 5, 1, 5といった数が格納されているとしたら 複数ある数は0と5の2つなので、2を返す、というだけのプログラムです。 int n=array.length; int cnt=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(array[i]==array[j]){ cnt++; break; } } } return cnt; forループで配列0から同じ数を順番に調べ、もしヒットすればカウントを増やして内側のループをブレイクし、配列1からまた順番に調べようとしたのですが、 上の例の場合、配列0と配列1が同じ数(0)ですので、カウントが余計に増えてしまいます。 どのように組めばうまく動作するでしょうか。宜しくお願いします。

    • ベストアンサー
    • Java
  • 要素にnullが入った多次元配列の次元数(2回目)

    同様の質問について再度投稿します。 以下、問題集で見掛けたプログラムの抜粋です。 String[][] Array = { {"Sunday", "Monday"}, null, {"Monday", "Tuesday"} }; int count =0; for (String[] A : array){ count += A.length; } System.out.println(count); このプログラムを実行すると、 要素nullのlengthが数えられないため、 NullPointerExceptionが発生する、ということです。 以前に質問した際には、 上記配列に含まれるnullは、大カッコで囲まれていないため、 次元としてカウントされないので、配列の次元数は 2次元となる、という回答を頂きました。 (配列変数も二次元で宣言されている。) 細かいようですが、大カッコで囲まれていないnullは 次元数としてカウントされなくても、要素として 拡張for文の対象にはなるのでしょうか…? 解説をお願いします。

専門家に質問してみよう