PHP

PHPのforeachで1つ前の要素にアクセスして比較する方法

結合する配列

 

あなた
PHPで、配列をforeachで回す際に、1つ前の要素と比較したいです。

どうしたらいいですか?

 

今回はこんな疑問に答えていきます。

 

PHPのforeachで1つ前の要素と比較する方法【コードで解説】

 

今回は、次のような配列を想定します。

 

 $datas = [
    0 => [
        "target_name" => "諭吉",
        "id" => 1,
        "content" => "相談があります",
        "created_at" => "1000-01-01 01:23:00"
    ],
    1 => [
        "target_name" => "諭吉",
        "id" => 2,
        "content" => "聞いてください",
        "created_at" => "1000-01-02 01:25:00"
    ]
];

 

この配列をforeachで回しつつ、「1つ前の要素より、created_atが大きかったら〜」という処理を書いていきます。

 

実際のコード①key-1を使うバージョン

 

次のようなコードになります。

 

            $beforeDate = date('Y/m/d', strtotime('9999-12-31 23:59:59'));
foreach ($datas as $key => $data) {
            $thisDate = date('Y/m/d', strtotime($datas[$key]['created_at']));
            if ($key >= 1) {
                $beforeDate = date('Y/m/d', strtotime($datas[$key - 1]['created_at']));
            }
            if ($thisDate > $beforeDate) {
                //ここにしたい処理
            }
        }

 

配列のキーが1以上の時、[$key - 1]の要素にアクセスすることで、比較しています。

何をやっているのか、直感的にわかりやすいので、通常はこちらの記述でいいかなと思います。

 

実際のコード②prev()を使うバージョン

 

次のようなコードになります。

 

$datas = [
    0 => [
        "target_name" => "諭吉",
        "id" => 1,
        "content" => "相談があります",
        "created_at" => "1000-01-01 01:23:00"
    ],
    1 => [
        "target_name" => "諭吉",
        "id" => 2,
        "content" => "聞いてください",
        "created_at" => "1000-01-01 01:25:00"
    ],
    2 => [
        "target_name" => "諭吉",
        "id" => 3,
        "content" => "失恋しました",
        "created_at" => "1000-01-03 01:25:00"
    ]
];

 $beforeDate = date('Y/m/d', strtotime('9999-12-31 23:59:59'));

foreach ($datas as $key => $data) {
    $thisDate = date('Y/m/d', strtotime($datas[$key]['created_at']));
    if ($key >= 1) {
        $beforeDate = date('Y/m/d', strtotime(prev($datas)['created_at']));
    }
    if ($thisDate > $beforeDate) {
        //ここにしたい処理
    }
    next($datas);
}

 

実は、phpには「prev()」という、1つ前の配列の要素にアクセスするための関数が用意されています。

そちらを使うのもアリでしょう。

PHPに慣れているからすると、こちらのほうがスマートかなとも思います。

>>参考:prev(公式ドキュメント)

 

注意点は、foreachの1回1回の最後に、next()でポインタを進めている点です。

このコードがないと、ポインタが進まないので注意です。

 

ということで、今回はPHPで配列をforeachで回す際に、1つ前の要素にアクセスする方法を紹介しました。

自分の場合は、チャットアプリで送信日が変わった時に表示するために使いました。

 

この記事が参考になれば幸いです。

最後まで読んでいただきありがとうございました。

プログラミングスクールに関する情報

【無料あり】プログラミングスクールおすすめランキング【WEBエンジニアになりたい方向け】と書かれた画像
【無料あり】プログラミングスクールおすすめランキング【WEBエンジニアになりたい方向け】

  あなたプログラミングスクールに通いたいけどたくさんありすぎてどこがいいのかわかりません。   最近はエンジニアブームということもありプログラミングスクールが増えました。 一方でたくさんありすぎてど ...

続きを見る

返金保証ありのプログラミングスクールランキング【エンジニアが選びました】と表示されたパソコンの画面
【転職保証つき】返金保証ありのプログラミングスクールランキング【エンジニアが選びました】

  あなた返金保証がついているオススメのプログラミングスクールってありますか?   結論から話すと、返金保証つきのプログラミングスクールランキングは次の通りです。   1位:DMMWEBキャンプ  【 ...

続きを見る

wordpress
【無料あり】WEB制作を学べるオンラインスクールランキング【副業で稼ぎたい方向け】

  あなたWeb制作の副業で稼ぎたいけど、どのスクールで学ぶのが良いの? スクール選びで失敗はしたくないです。   ↑このような疑問や不安を解決するべく、現役のWebエンジニアがWEB制作を学べるスク ...

続きを見る

フリーランス
無料あり:フリーランスを目指せるプログラミングスクールランキング【体験をもとに徹底分析しました】

  あなたフリーランスエンジニアを目指すことができるプログラミングスクールってありますか?   最近では、高年収や働きやすさの魅力からフリーランスエンジニアを目指す方も増えてきました。 結論から話すと ...

続きを見る

WEB系自社開発企業にいけるプログラミングスクールランキング【現役エンジニアおすすめ】と書かれた画像
WEB系自社開発企業にいけるプログラミングスクールランキング【現役エンジニアおすすめ】

  あなたWEB系の自社開発企業に就職したいです。 オススメのスクールを教えて下さい。   結論から話すと、WEB系自社開発に行きやすいスクールのランキングは以下の通り。   第1位:テックアカデミー ...

続きを見る

-PHP

© 2024 エンジニアてんし君ブログ