【PHP】繰り返し処理中(foreach)にて配列の最初と最後だけに処理をしたい時は?
PHPのforeachを使用したとき、最初だけこの処理をしたい!!最後だけこの処理がしたい!!という場面に遭遇することがあると思います。
その際に、本記事で解決に繋がれば幸いです。
PHPのバージョンにより実装方法が異なりますので2パターンとあまり推奨できませんが2パターンの計4パターンの方法を記載します。
PHP 7.3以降
PHPのバージョンが7.3以降の実装はこちらになります。
array_key_first関数とarray_key_last関数を使用して、最初と最後を判別いたいます。
コード
$array = ['red', 'yellow', 'blue', 'green'];
foreach ($array as $index => $value) {
if ($index === array_key_first($array)) {
// 始端処理:最初だけの処理
echo '最初にだけ処理したいことを記載します。';
}
echo $value';
if ($index === array_key_last($array)) {
// 終端処理:最後だけの処理
echo '最後にだけ処理したいことを記載します。';
}
}
出力結果
最初にだけ処理したいことを記載します。
red
yellow
blue
green
最後にだけ処理したいことを記載します。
PHP 7.3以前
PHPのバージョンが7.3以前の実装はこちらになります。
array_key_first関数とarray_key_last関数を自作して、
function_exists関数を使用して、指定した関数が定義されているか判別いたします。
コード
// 関数
if (!function_exists('array_key_first')) {
function array_key_first(array $arr) {
foreach($arr as $key => $unused) {
return $key;
}
return;
}
}
if (!function_exists("array_key_last")) {
function array_key_last(array $arr) {
if (empty($arr)) {
return;
}
return array_keys($arr)[count($arr) - 1];
}
}
// 処理
$array = ['red', 'yellow', 'blue', 'green'];
foreach ($array as $index => $value) {
if ($index === array_key_first($array)) {
// 始端処理:最初だけの処理
echo '最初にだけ処理したいことを記載します。';
}
echo $value;
if ($index === array_key_last($array)) {
// 終端処理:最後だけの処理
echo '最後にだけ処理したいことを記載します。';
}
}
出力結果
最初にだけ処理したいことを記載します。
red
yellow
blue
green
最後にだけ処理したいことを記載します。
reset関数 + end関数
reset関数は配列から最初の要素をend関数は最後の要素を取得します。
取得した値を使用してif文で一致するか判別します。
※注意事項:
配列内の要素を使用している為、重複した要素がある場合は期待した結果を得ることができません。
コード
$array = ['red', 'yellow', 'blue', 'green'];
foreach ($array as $value) {
if ($value === reset($array)) {
// 始端処理:最初だけの処理
echo '最初にだけ処理したいことを記載します。';
}
echo $value;
if ($value === end($array)) {
// 終端処理:最後だけの処理
echo '最後にだけ処理したいことを記載します。';
}
}
出力結果
最初にだけ処理したいことを記載します。
red
yellow
blue
green
最後にだけ処理したいことを記載します。
Count関数 + インクリメント
Count関数で配列の総要素数を取得して、繰り返し処理内でインクリメントした値とif文で最初と最後を判別します。
コード
$array = ['red', 'yellow', 'blue', 'green'];
$array_count = count($array);
$i = 0;
foreach ($array as $value) {
if ($i === 0) {
// 始端処理:最初だけの処理
echo '最初にだけ処理したいことを記載します。';
}
echo $value;
$i++;
if ($i === $array_count) {
// 終端処理:最後だけの処理
echo '最後にだけ処理したいことを記載します。';
}
}
出力結果
最初にだけ処理したいことを記載します。
red
yellow
blue
green
最後にだけ処理したいことを記載します。
「東三河・西三河で働く!」高時給な派遣求人が満載!
-
前の記事
2024年1月の学習内容 2024.02.02
-
次の記事
【デザインツール】PhotoshopとIllustratorどう使い分ける? 2024.02.28