【PHP8.x環境】Warning: Undefined array key 0〜が出てしまう件は、isset() 関数を使用して要素が存在するかを事前に確認してから処理をする

PHP8.x環境がレンタルサーバーなどで使えるようになってきましたね。

これまでもPHP5.xからPHP7.xにバージョンが上がった際など、今まで動いてきたソースコードでエラーが出る事例は多数ありました。

この度タイトルまんまですが「Warning: Undefined array key 0〜」が出て処理がうまくいかない局面に遭遇し、isset() 関数を使用して要素が存在するかを事前に確認してから処理をするというのをChat GPT教わった次第です。

<php?
//記事内の最初に出てくる画像素取得する
function catch_that_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  $first_img = $matches [1] [0];
  if(empty($first_img)){
    $first_img = get_template_directory_uri() . '/images/img_noimages.jpg';
  }
  return $first_img;
}
?>

上記のようなソースコードがあった場合PHP8.x環境では「$matches [1] [0]」の要素が存在しないという理由でエラーが出てしまいます。

そこで、isset() 関数で「$matches [1] [0]」が存在した場合に処理をするというように(Chat GPTが)書き換えました。

<?php
//記事内の最初に出てくる画像素取得する
function catch_that_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  if (isset($matches[1][0])) { //$matches[1][0]が存在するか判定
    $first_img = $matches[1][0];
  }
  if (empty($first_img)) {
    $first_img = get_template_directory_uri() . '/images/img_noimages.jpg';
  }
  return $first_img;
}
?>

便利ですねChat GPT


投稿日

カテゴリー:

,

投稿者:

コメント

コメントを残す

%d人のブロガーが「いいね」をつけました。