Scribble at 2020-12-13 00:26:37 Last modified: unmodified

当サイトの冒頭で並べている最新(更新)記事の並びは、essays.php という記事のデータベースを配列として require_once() してから、冒頭の記事データを取り出して一つだけ大きく表示したり、残りの6つを並べて表示している。そこで each() を使っていたのだが、ローカルで MarkupDancing のページを表示してみると、each() が使えないというエラーが出ている。調べると PHP8 では each() が削除されたらしい。そこで、その個所を書き直しておいた。まだヘテムルが PHP8 をサポートするのは先になるのかもしれないが、念のためだ。

なお、each() は実行した時点のポインタで配列からデータを取得する関数だ。そのため、記事のデータを格納している配列を $data とすると、each( $data ) で先頭のキーのデータをキー及び値のペアで取得できる。もちろん、多次元配列の場合は値に配列が入っていることもあり、当サイトでもキーごとに記事のタイトルやキー・ビジュアルとなる画像のファイル名が格納されている。ただ、その配列はキーが単純に0から始まる整数ではなく、最終更新日の日時を整数へ置き換えた値なので(キーで記事の順番を降順で並び替えられるようにするため)、ページの先頭で大きく表示する記事のキーを0だと仮定して取り出せない。なので、どういうキーであろうと最初のキーの値を取り出すために each() を使っていたわけである。しかし、PHP8 で使えないなら、別の方法に変更しなくてはいけない。

ということで、今回は最も単純な方法に変更した。もちろん、日付を数値に変換したキーで作った配列は、あらかじめ krsort( $data ) してある。(1) reset( $data ) してポインタの位置を初期化し、(2) $first = current( $data ) で先頭のポインタに該当するデータを $first へ格納し、(3) $first[ 'title'] などとしてコンテンツの表示に使い、(4) 残りの記事を6つだけ表示するために next( $data ) でポイントを一つだけ送って、(5) while( $articles = current( $data ) { データ表示; next( $data ); } という while ループで後のデータを一つずつ表示する。もちろん while ループの中で6個のデータ表示で終えるための番兵を使っている。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook