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つ前の要素にアクセスする方法を紹介しました。

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

 

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

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

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

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

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

続きを見る

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

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

続きを見る

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

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

続きを見る

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

  あなたWEB系の自社開発企業に就職したいです。 オススメのスクールを教えて下さい。   エンジニアを目指すにあたってまず最初に自社開発企業への転職を希望する方がほとんどです。 ...

続きを見る

プログラミンングスクールに無料で通うならココ【現役エンジニアおすすめ】と書かれた画像
プログラミンングスクールに無料で通うならココ【現役エンジニアおすすめ】

  あなたプログラミングスクールに通いたいけどどのスクールも何十万もして通えません。コスパよくエンジニアになれるスクールはありますか?   今回はコスパが良いどころか完全に無料でプ ...

続きを見る

-PHP

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