CakePHP5入門【WebAPI編㉔】ナンバーズ3を予想⑧
A子
cronで毎日(平日のみ)実行している「src/Command/Num3boxCommand.php」だけどさ
PDF化しているのは「出現時期の古い順」の1ページだけだよね
PDF化しているのは「出現時期の古い順」の1ページだけだよね
B美
そうね
A子
従来のはそのまま残しといて、2ページ目に前回のスコア加算アルゴリズムを使った「スコアの多い順」を追加しようよ
PDFって、改ページができるんだよね?
PDFって、改ページができるんだよね?
C菜
当然できるはずですよ~
(よく見かけますもん)
mPDFでのやり方は知りませんけど~
(よく見かけますもん)
mPDFでのやり方は知りませんけど~
B美
CSSで改ページを指定する方法と、mPDFのメソッドを呼び出す方法の二種類があるわね
もしもインスタンス化したオブジェクトの参照を「$mpdf」で指しているとするならば
この命令を2ページ目を出力する直前に実行するだけよ
もしもインスタンス化したオブジェクトの参照を「$mpdf」で指しているとするならば
| $mpdf->addPage(); |
この命令を2ページ目を出力する直前に実行するだけよ
C菜
CSSのほうが分かりやすいと思うんですけど、その場合はどうなりますか~
B美
HTMLコンテンツの中の1ページ目と2ページ目の境目に以下の一文を入れるだけね
HTMLコンテンツを格納する変数を一つだけ用意して、一気に2ページ分を出力させるならCSS制御かしらね
逆に、複数の変数にそれぞれ1ページ目のデータと2ページ目のデータを入れて、順番にPDF出力を行うなら「addPage」メソッドだと思うわ
| <div style="page-break-before: always"></div> |
HTMLコンテンツを格納する変数を一つだけ用意して、一気に2ページ分を出力させるならCSS制御かしらね
逆に、複数の変数にそれぞれ1ページ目のデータと2ページ目のデータを入れて、順番にPDF出力を行うなら「addPage」メソッドだと思うわ
A子
なるほどなるほど
だったら今回は「addPage」メソッドのほうでやってみよう
(HTMLデータを別の変数に分けたほうが管理しやすそうだから…)
んじゃ、「src/Command/Num3boxCommand.php」の「execute」メソッドに追記していくよ
と
の間に2ページ目の処理を追加したらどうかな?
こんな感じ?
だったら今回は「addPage」メソッドのほうでやってみよう
(HTMLデータを別の変数に分けたほうが管理しやすそうだから…)
んじゃ、「src/Command/Num3boxCommand.php」の「execute」メソッドに追記していくよ
|
//PDFへの書き出し
$mpdf->WriteHTML($css, HTMLParserMode::HEADER_CSS); $mpdf->WriteHTML($content, HTMLParserMode::HTML_BODY); |
|
//格納ディレクトリ
$dir = WWW_ROOT."pdf".DS.date('Ym').DS; if (!is_dir($dir)) { mkdir($dir, 0755, true); } |
の間に2ページ目の処理を追加したらどうかな?
|
//ここから2ページ目
$result2 = []; if ($pattern == 'A' || $pattern == 'C') { //パターンAまたはパターンC $odd_even_score_array = [9, 41, 42, 9]; $sum_score_array = [0, 0, 0, 5, 5, 10, 15, 15, 20, 30, 35, 35, 40, 45, 40, 35, 45, 40, 30, 20, 15, 10, 10, 5, 5]; foreach ($result as $idx => $val) { //出現時期の古い順 $rank_score = 60 - $idx; //予想数字を各桁ごとに分解 $num3_str = $val[0]; $num3_int = intval($num3_str); $num3_place1 = intval($num3_int % 10); $num3_place10 = intval($num3_int % 100 / 10); $num3_place100 = intval($num3_int / 100); //奇偶スコア $odd_even_total = ($num3_place100 % 2) + ($num3_place10 % 2) + ($num3_place1 % 2); $odd_even_score = $odd_even_score_array[$odd_even_total]; //各桁の合計スコア $sum_total = $num3_place1 + $num3_place10 + $num3_place100; $sum_score = $sum_score_array[$sum_total]; //三種類のスコアの総合計 $total_score = $rank_score + $odd_even_score + $sum_score; //結果を格納 array_push($result2, [$num3_str, $rank_score, $odd_even_score, $sum_score, $total_score]); } } |
こんな感じ?
C菜
最後に「合計点の多い順での並べ替え」が必要ですよ~
んで、続きはこうでしょうか~
(PDF化の処理です~)
|
//総得点の降順で並べ替え
array_multisort(array_column($result2, 4), SORT_DESC, $result2); |
んで、続きはこうでしょうか~
(PDF化の処理です~)
|
//コンテンツ
$content2 = ''; if (count($result2) == 0) { $content2 .=<<<EOF <div style="width: 100%;text-align: center;"> <h3>ボックス値(予想)【2/2】</h3> 【{$year}年{$month}月{$day}日】 <br /><br /><br /> <span style="color: red;">パターンA及びパターンC以外の購入については推奨できません。</span> EOF; } else { $content2 .=<<<EOF <div style="width: 100%;text-align: center;"> <h3>ボックス値(予想)一覧【2/2】</h3> 【{$year}年{$month}月{$day}日】…<span style="color: red;">三つのスコア合計(総得点)の降順</span> <br /> <table> <tbody> <tr> <th style="width: 50px;">順位</th> <th style="width: 100px;">ボックス値</th> <th style="width: 100px;">出現時期の古い順<br />による得点</th> <th style="width: 100px;">奇数・偶数パターン<br />による得点</th> <th style="width: 100px;">三桁の数字の合計<br />による得点</th> <th style="width: 100px;">総得点</th> </tr> EOF; foreach ($result2 as $idx => $val) { $rank = $idx + 1; if ($rank <=10) { $content2 .= "<tr><td class='top10'>{$rank}</td><td class='top10'>{$val[0]}</td><td class='top10'>{$val[1]}</td><td class='top10'>{$val[2]}</td><td class='top10'>{$val[3]}</td><td class='top10'>{$val[4]}</td></tr>"; } else { $content2 .= "<tr><td>{$rank}</td><td>{$val[0]}</td><td>{$val[1]}</td><td>{$val[2]}</td><td>{$val[3]}</td><td>{$val[4]}</td></tr>"; } } $content2 .=<<<EOF </tbody> </table> <span style="color: red;font-size: small;">※候補数字60個は1ページ目【1/2】と同一です。並び順のみ変更しています。</span> </div> EOF; } //PDFへの書き出し $mpdf->addPage(); //改ページ $mpdf->WriteHTML($content2, HTMLParserMode::HTML_BODY); |
A子
2ページ目を【2/2】と表記するなら、1ページ目も同様に【1/2】を追加しないとね
(あと、コメントも…)
以下が全体像だよ
(コード量がさらに増した…(苦笑))
(あと、コメントも…)
|
<h3>ボックス値(予想)一覧【1/2】</h3>
【{$year}年{$month}月{$day}日】…<span style="color: red;">出現時期の古い順</span> |
以下が全体像だよ
(コード量がさらに増した…(苦笑))
C菜
実行確認してみましょう~
「MATE端末」を立ち上げてっと…
大丈夫みたいです~
(PDFファイルもきちんと作成されましたよ~)
「MATE端末」を立ち上げてっと…
|
cd html/numapp[Enter]
bin/cake num3box[Enter] |
大丈夫みたいです~
(PDFファイルもきちんと作成されましたよ~)
A子
よし
あとはこれ(Num3boxCommand.php)をサーバ(本番環境)にアップしてっと…
あとはこれ(Num3boxCommand.php)をサーバ(本番環境)にアップしてっと…
C菜
2026年9月14日(月)の結果はこうなりました~
ばっちり2ページ目が作られてますよ~
ばっちり2ページ目が作られてますよ~
B美
それで結果はどうだったのかしら?
的中したの?
的中したの?
A子
この日(2026年9月14日)の結果は「188」、つまりダブルだったよ
大外れ(笑)
大外れ(笑)
B美
笑い事じゃねぇよ(苦笑)
まぁ、まだ9月の中旬だし、しばらくは放置ね
まぁ、まだ9月の中旬だし、しばらくは放置ね
C菜
ですね~

