• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WHILE中で前と重複したら間引くコードの書き方)

WHILE中で前と重複したら間引くコードの書き方

このQ&Aのポイント
  • $col["category"]の文字列が前に出てきたのと同一ならスキップ(非表示)
  • ループ中、もし$col["category"]の文字列が前に出てきたのと同一ならスキップ(非表示)すれば良い
  • 冒頭のコードで$sv_magazine = '';と初期化するのは、WHILEの外側でも効果があるため

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

  • ベストアンサー
noname#244856
noname#244856
回答No.1

私の以前のPDOを使った回答で  // 結果を取り出して表示しやすいようにセットしていく  $data = array();  foreach ($stmt as $row) {   if ($row['title'] === '') {    $data[$row['yyyymm']][$row['category']] = '';   } elseif ($row['category'] === '') {    $data[$row['yyyymm']][$row['title']] = $row['author'];   } else {    $data[$row['yyyymm']][$row['category']][$row['title']] = $row['author'];   }  } としているところがあったと思いますが、このように一度連想配列にセットすることで、親見出しが重複するものを一つにまとめることができます。mysql関数を使った場合でもやってることは同じなので参考にしてください。 (PDOが一見難しそうに見えるかもしれませんが、「クラスとオブジェクトが分からない」という思い込みから毛嫌いしているだけかもしれないので、チャレンジしてみてください。実際何も難しいことはありません。コーディング自体もPDOを使ったほうが短く書けますしラクです。) >> (質問とぜんぜん関係ないですが、冒頭のコードで、$sv_magazine = '';と初期化?させているのは理解できますが、WHILEの外側でなぜ効くのか、悩んでます(^_^;) 変数のスコープ http://php.net/manual/ja/language.variables.scope.php スコープを構成する単位には「グローバル空間」「名前空間」「クラス」「メソッド」「関数」「無名関数(クロージャ)」などがあります。「if」「while」「for」「foreach」などが含まれていないことに注意してください。このあたりが他の言語と実装が大きく異なります。PHP独特です。

litton101
質問者

お礼

To_aru_Userさん、いつもお世話になります。また、早速のご回答ありがとうございました。 PDOですが、一度は前回もご教示いただいたサイトなどを確認しながら導入をやりかけたのですが、php.iniの編集などでつまづいていました。 とりあえず、今回の雑誌索引は、当面社内LAN内での運用にとどまる見込みで、対外的(WWW)に公開するとなればそのときでよいかと後回しになっていました。全て言い訳ですが。。。どうもすみません。いずれ必ず取り組む課題の筆頭にはなっております。 >このあたりが他の言語と実装が大きく異なります。PHP独特です。 詳しく教えていただき大変ありがとうございます。 やや難しい話ですが、事情がわかって非常にすっきりしました。

関連するQ&A