
http://oshiete.goo.ne.jp/qa/8277847.html
で、No2のagunuz様にご教示いただいたサンプルを以下のように組み込みました。
(当方コメントは■です)
$sv_magazine = '';
while ($col = mysql_fetch_array($rst)) {
$magazine = $col['magazinecode'];
if ($magazine !== $sv_magazine) {
if ($sv_magazine !== '') {
// 前のマガジン番号($sv_magazine)のフッタ(必要があれば)
$body .= "</ul>\n"; //■この行を加筆しました
}
// 今読んだマガジン番号($magazine)のヘッダ
$body .= "<h1>【" . $col['yyyymm'] . "】</h1>\n"; //■この行を加筆しました
$body .= "<ul>\n"; //■この行を加筆しました
$sv_magazine = $magazine;
}
// $col から明細を出力
$body .= "<li>". $col["category"] ; //■ここから・・・・
$body .= "<ul>\n";
$body .= "<li>" . $col["title"];
$body .= "<ul>\n";
$body .= "<li>" . $col["author"];
$body .= "</ul>\n";
$body .= "</ul>\n"; //■・・・ここまでの行を加筆しました
} // ループ終了
if ($sv_magazine !== '') {
// 最後のマガジン番号($sv_magazine)のフッタ(必要があれば)
$body .= "</ul>\n"; //■この行を加筆しました
}
上記を実行し、元質問にお示ししたサンプルレコードを読み込むと、以下のように出力されます。
(箇条書きインデントのポツのレベルは、1は●、2は◇、3は◎と仮定します)
ただ、当前ですが、同じ号の同じ「分類(『特集』、『連載』などの文言)」が2回目以降にもでてくるのはスマートでないので、注記した行は間引いて、以下のようにスッキリHTMLに出力表示させたいと思います。
【2013年5月号】
●特集:折り紙
◇作成法1
◎山本
●特集:折り紙 【←この行は2度目なので間引いて表示しない】
◇作成法2
◎佐藤
●特集:折り紙 【←この行も3度目なので間引く】
◇作成法3
◎岩田
●連載
◇はさみ研ぎ方
◎伊藤
●連載 【←この行は2度目なので間引く】
◇のりの選び方
◎野口
当方での想像として、ループ中、もし$col["category"]の文字列が前に出てきたのと同一ならスキップ(非表示)でいいよ、というスイッチを加筆すれば良さそうですが、どのように記述したらよろしいでしょうか。
(質問とぜんぜん関係ないですが、冒頭のコードで、$sv_magazine = '';と初期化?させているのは理解できますが、WHILEの外側でなぜ効くのか、悩んでます(^_^;)
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.scop …
スコープを構成する単位には「グローバル空間」「名前空間」「クラス」「メソッド」「関数」「無名関数(クロージャ)」などがあります。「if」「while」「for」「foreach」などが含まれていないことに注意してください。このあたりが他の言語と実装が大きく異なります。PHP独特です。
To_aru_Userさん、いつもお世話になります。また、早速のご回答ありがとうございました。
PDOですが、一度は前回もご教示いただいたサイトなどを確認しながら導入をやりかけたのですが、php.iniの編集などでつまづいていました。
とりあえず、今回の雑誌索引は、当面社内LAN内での運用にとどまる見込みで、対外的(WWW)に公開するとなればそのときでよいかと後回しになっていました。全て言い訳ですが。。。どうもすみません。いずれ必ず取り組む課題の筆頭にはなっております。
>このあたりが他の言語と実装が大きく異なります。PHP独特です。
詳しく教えていただき大変ありがとうございます。
やや難しい話ですが、事情がわかって非常にすっきりしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- HTML・CSS htmlについて質問です! 写真のように写真の部分が?になってしまいます。 ファイルもしっかり選べて 1 2023/07/09 21:17
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS htmltとcssの連携をして画像縮小について 1 2022/11/15 20:32
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列としてMysqlから値を取得す...
-
SELECT結果から動的にコンボボ...
-
mysql_fetch_assoc()の非推奨
-
sortable ギブアップです…助け...
-
phpについて
-
count() の値が異なってしまう...
-
SQLiteのhtml表示
-
PHPで[]の使い方について
-
データベースのページング出力...
-
PHP 10件表示 "前へ" "次へ"
-
チェックボックス検索システム
-
php5.2.9に変更後に不具合について
-
エクセルVBAについて
-
smartyでMySQLから連想配列取り...
-
チェックボックスでチェックし...
-
エラーの原因と改善策を教えて...
-
記事のコメント数表示について
-
チェックボックスで受け取った...
-
phpでforeach ($stmt as $row)...
-
例外処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アラートでyes noを作りたいです。
-
dbに登録したデータをphpのプル...
-
文字化けが解決できません。お...
-
VBA初心者です。
-
phpでmysqlを使ってデータベー...
-
DBで検索結果に該当するデータ...
-
smartyでMySQLから連想配列取り...
-
PHPのプルダウンメニューにDBの...
-
[PHP+MySQL] データをランダム...
-
sortable ギブアップです…助け...
-
mysqlから取得した配列をカンマ...
-
sortableを使用したデータのUPDATE
-
PHPでMySQLデータを呼び出し、w...
-
PHP+MySQLでの配列のinsert文に...
-
XML初心者です。
-
検索結果($_POST)が2ページ目...
-
smartyのforeachの使い方?
-
SELECT結果から動的にコンボボ...
-
pg_queryの結果を2回とりだす...
-
PEARのPagerの設定の仕方
おすすめ情報