Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】end()関数の使い方

end関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

end関数は、配列の内部ポインタを最終要素に移動させ、その最終要素の値を返す関数です。この関数は、引数として参照渡しされた配列の内部ポインタを操作し、配列の最後の要素を指すように設定します。

具体的には、end()関数が呼び出されると、配列の内部ポインタは最終要素の位置に移動し、その最終要素の値が戻り値として返されます。これは、配列の要素を順次処理する際に用いられるcurrent()next()prev()reset()といった他の内部ポインタ操作関数と連携して使用されることが多いです。

もし引数として渡された配列が空である場合、end()関数はfalseを返します。また、配列の最後の要素の値が0や空文字列""nullなど、PHPにおいてfalseと評価される値である可能性もあります。そのため、end()の戻り値が実際に配列が空であることによるものなのか、それとも最終要素の値がfalseと評価される値であるのかを厳密に区別するためには、=== falseという厳密な比較演算子を用いて戻り値を確認することが推奨されます。

この関数は、配列の内容を変更することなく、最終要素に直接アクセスしたい場合や、そこから配列を逆順に辿り始める際の準備として特に有用です。配列内部の処理位置を柔軟に制御するための重要なツールの一つと言えます。

構文(syntax)

1<?php
2$array = [10, 20, 30, 40, 50];
3$lastElement = end($array);
4?>

引数(parameters)

array &$array

  • array &$array: 操作対象の配列。配列の内部ポインタが配列の最後の要素を指すようになります。

戻り値(return)

mixed

配列の最後の要素の値を返します。配列のポインタも配列の最後に移動します。

サンプルコード

PHP end() 関数で配列の最終要素を取得する

1<?php
2
3/**
4 * PHPの end() 関数の使用例を示します。
5 * end() 関数は、配列の内部ポインタを最終要素に移動させ、その最終要素の値を返します。
6 * この例では、まず foreach ループで配列の全要素を表示し、その後に end() 関数で最後の要素を取得します。
7 * キーワード「php endforeach」との関連性を示すため、foreach の代替構文を使用しています。
8 */
9function demonstrateEndFunctionWithForeach(): void
10{
11    // サンプルとなる文字列の配列を定義
12    $fruits = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry'];
13
14    echo "--- 配列の全要素を foreach ループで表示 ---" . PHP_EOL;
15    // foreach ループを使って配列の全ての要素を順番に表示します。
16    // PHP の代替構文 (foreach ... endforeach;) を使用しています。
17    foreach ($fruits as $key => $fruit):
18        echo "要素 [{$key}]: {$fruit}" . PHP_EOL;
19    endforeach; // foreach ループの終了を示すキーワード
20
21    echo PHP_EOL . "--- end() 関数で最後の要素を取得 ---" . PHP_EOL;
22    // end() 関数を呼び出すことで、配列の内部ポインタが最後の要素に移動し、
23    // その最後の要素の値が $lastFruit 変数に代入されます。
24    $lastFruit = end($fruits);
25
26    echo "end() 関数で取得した最後の要素: {$lastFruit}" . PHP_EOL;
27
28    echo PHP_EOL . "--- 空の配列に対する end() の動作 ---" . PHP_EOL;
29    // 空の配列に対して end() を呼び出すと、false が返されます。
30    $emptyArray = [];
31    $resultEmpty = end($emptyArray);
32    // var_export を使うことで、false が文字列 'false' として表示され、より分かりやすくなります。
33    echo "空の配列に対する end() の結果: " . var_export($resultEmpty, true) . PHP_EOL;
34}
35
36// 上記の関数を実行して、end() 関数の動作を確認します。
37demonstrateEndFunctionWithForeach();
38
39?>

PHPのend()関数は、配列の内部ポインタをその配列の最後の要素に移動させ、その最終要素の値を返す関数です。この関数は、引数として操作したい配列をarray &$arrayのように参照渡しで受け取ります。これにより、関数内で配列の内部ポインタが変更されるため、後続のポインタ操作(例: current(), next()など)に影響を与えます。戻り値はmixed型で、最後の要素の値が返されますが、配列が空の場合にはfalseが返される点に注意が必要です。

提供されたサンプルコードでは、まず$fruitsという文字列の配列が定義されています。配列の全要素を順番に表示するために、foreach ($fruits as $key => $fruit): ... endforeach;というPHPの代替構文を用いたループが使用されています。endforeach;キーワードは、一般的な}の代わりにループの終わりを示すものです。

ループの後、end($fruits)を呼び出すことで、$fruits配列の内部ポインタは最後の要素である「Elderberry」に移動し、その値が$lastFruit変数に代入されて出力されます。

さらに、空の配列$emptyArrayに対してend()関数を適用すると、戻り値がfalseとなることも示されています。これはvar_export()関数を使って明示的に表示されており、end()関数を使用する際の重要な考慮事項となります。この関数は、配列の最後の要素を簡単に取得したい場合に非常に便利です。

end()関数は配列の最後の要素を返しますが、同時に配列の内部ポインタをその最終要素に移動させます。このポインタの変更は、current()next()などの他の配列操作に影響を与える可能性があるため注意が必要です。

特に、空の配列に対してend()を呼び出すとfalseが返されます。戻り値が実際にfalseであるかを判断する際は、0や空文字列といった値がfalseと評価される可能性のある要素と区別するため、厳密な比較(=== false)を用いることを推奨します。

サンプルコードで利用されているforeach ... endforeach;は、foreach (...) { ... }構文と同じループの代替記法であり、end()関数とは直接的な関連はありません。これは主にHTMLテンプレート内でPHPのブロックを明示する際によく使われる記法と理解してください。

PHP end()で配列の末尾要素を取得する

1<?php
2
3// end() 関数は、配列の内部ポインタを最後の要素に移動させ、その要素の値を返します。
4// システムエンジニアを目指す初心者向けのサンプルコードです。
5
6$fruits = ['apple', 'banana', 'orange', 'grape'];
7
8echo "元の配列:\n";
9print_r($fruits);
10
11// end() を呼び出すと、内部ポインタが最後の要素 'grape' を指すようになり、
12// その値が $lastFruit 変数に代入されます。
13$lastFruit = end($fruits);
14
15echo "end() で取得した最後の要素: " . $lastFruit . "\n";
16
17// end() 実行後、配列の内部ポインタは最後の要素を指しています。
18// current() を使って現在の内部ポインタが指す要素を確認できます。
19echo "current() で確認した現在の要素: " . current($fruits) . "\n";
20
21?>

PHPのend関数は、配列の中から最後の要素を効率的に取得するための機能です。この関数は、引数として渡された配列の「内部ポインタ」と呼ばれる、現在の注目している位置を示す目印を、配列のいちばん最後の要素まで移動させます。そして、その最後の要素の値を戻り値として返します。引数array &$arrayは、配列そのものを参照(直接変更)することを意味するため、end関数を呼び出した後も、配列の内部ポインタは最後の要素を指した状態が維持されます。戻り値mixedは、配列の最後の要素が文字列や数値など、どのような種類の値であっても取得できることを示します。

サンプルコードでは、$fruitsという名前の配列にいくつかの果物が格納されています。end($fruits)を実行すると、この配列の内部ポインタは「grape」という最後の要素の位置に移動し、その値である「grape」が$lastFruit変数に代入されます。end関数が実行された後も、配列の内部ポインタは最後の要素を指し続けているため、次にcurrent($fruits)関数を使って内部ポインタが現在どこを指しているかを確認すると、やはり「grape」という値が表示されます。このようにend関数は、配列の最後の要素を簡単に取得できるだけでなく、配列内の操作の出発点として内部ポインタを最後の位置に設定したい場合にも役立ちます。

end()関数は、引数として渡された配列の内部ポインタを最後の要素に移動させ、その要素の値を返します。この時、元の配列の内部ポインタが実際に変更されるため、後続でcurrent()next()などの配列ポインタ操作関数を使う際には、意図しない挙動にならないよう注意が必要です。また、配列が空の場合にend()関数を呼び出すとfalseが返されます。この挙動を知らないと、予期せぬエラーやバグにつながる可能性がありますので、空配列の可能性も考慮して利用することが重要です。単に最後の要素を取得するだけでなく、配列の内部状態に影響を与えることを理解し、コードを記述してください。

PHP 8: 文字列が指定サフィックスで終わるか判定する

1<?php
2
3/**
4 * この関数は、PHP 8で導入されたstr_ends_with関数を使用して、
5 * 文字列が特定のサフィックスで終わるかを確認します。
6 *
7 * 与えられたリファレンス情報「end」は配列の内部ポインタを操作し、
8 * 最後の要素の値を取得する関数であり、文字列の末尾チェックとは目的が異なります。
9 * キーワード「endswith」に最も関連性の高いPHP 8の機能はstr_ends_with()です。
10 *
11 * @param string $haystack 検索対象の文字列。
12 * @param string $needle 探すサフィックス。
13 * @return bool 文字列がサフィックスで終わる場合 true、それ以外は false。
14 */
15function checkStringEndsWith(string $haystack, string $needle): bool
16{
17    return str_ends_with($haystack, $needle);
18}
19
20// --- サンプル使用例 ---
21
22// テスト用の文字列を定義
23$mainString = "このファイルはsample.txtです。";
24$anotherString = "PHPプログラミングは楽しい!";
25
26// 文字列が特定のサフィックスで終わるかを確認
27if (checkStringEndsWith($mainString, ".txtです。")) {
28    echo "'{$mainString}' は '.txtです。' で終わります。\n";
29} else {
30    echo "'{$mainString}' は '.txtです。' で終わりません。\n";
31}
32
33// 異なるサフィックスで確認
34if (checkStringEndsWith($mainString, ".php")) {
35    echo "'{$mainString}' は '.php' で終わります。\n";
36} else {
37    echo "'{$mainString}' は '.php' で終わりません。(期待通り)\n";
38}
39
40// 別の文字列で確認
41if (checkStringEndsWith($anotherString, "楽しい!")) {
42    echo "'{$anotherString}' は '楽しい!' で終わります。\n";
43} else {
44    echo "'{$anotherString}' は '楽しい!' で終わりません。\n";
45}
46
47// 大文字・小文字を区別する例 (str_ends_withのデフォルト動作)
48$fileName = "Document.PDF";
49if (checkStringEndsWith($fileName, ".pdf")) {
50    echo "'{$fileName}' は '.pdf' で終わります。\n";
51} else {
52    echo "'{$fileName}' は '.pdf' で終わりません。(大文字・小文字は区別されます)\n";
53}
54
55?>

PHPでは、文字列の末尾が特定の文字列(サフィックス)で終わるかどうかを確認したい場面がよくあります。このサンプルコードは、PHP 8で導入されたstr_ends_with()関数を活用し、そのようなチェックを行うカスタム関数checkStringEndsWithの利用方法を示しています。

checkStringEndsWith関数は、以下の二つの引数を取ります。

  • $haystack(文字列):検索対象となる元の文字列です。
  • $needle(文字列):$haystackの末尾に存在するかを確認したいサフィックス(部分文字列)です。

この関数は、$haystack$needleで終わる場合にtrue(真)を、そうでない場合はfalse(偽)をbool型として返します。例えば、ファイル名が特定の拡張子で終わるか、ユーザー入力が特定のキーワードで締めくくられているかなどを手軽に確認できます。str_ends_with()関数はデフォルトで大文字・小文字を区別して判定しますので、「Document.PDF」が「.pdf」で終わるかを確認するとfalseとなります。

ちなみに、ご提示いただいたリファレンス情報にあるend()関数は、配列の内部ポインタを最終要素に移動させ、その要素の値を返す機能を持つもので、文字列の末尾チェックとは目的が異なります。文字列の末尾チェックには、このstr_ends_with()関数が最も適切で現代的な方法です。

提示されたリファレンス情報のend関数は、配列の内部ポインタを操作し最後の要素を取得するもので、文字列の末尾を確認する目的とは全く異なります。キーワード「endswith」に合致する文字列の末尾判定には、サンプルコードで利用されているstr_ends_with関数を使用してください。この関数はPHP 8で導入されたため、それ以前のPHPバージョンでは利用できませんので、実行環境のバージョンを確認することが重要です。また、str_ends_with関数は大文字・小文字を区別して判定します。期待通りの結果を得るためには、引数に正しい文字列型を渡すことも注意点です。

PHP: end()とendwhileで配列を操作する

1<?php
2
3/**
4 * PHPのend()関数とendwhile構文の基本的な使い方を示すサンプルコードです。
5 *
6 * end()関数は、配列の内部ポインタを最終要素に移動させ、その値を返します。
7 * 主に配列の最後の要素を効率的に取得する際に使用されます。
8 *
9 * endwhile構文は、whileループを記述するための代替記法で、
10 * 特にテンプレートエンジンなどでブロックを明示するのに使われることがあります。
11 *
12 * @param array<string> $array デモンストレーションに使用する文字列の配列
13 */
14function demonstrateArrayPointerAndEndWhileSyntax(): void
15{
16    $fruits = ['Apple', 'Banana', 'Orange', 'Grape'];
17
18    echo "--- 元の配列 ---\n";
19    print_r($fruits);
20
21    // 1. end()関数を使用して配列の最後の要素を取得します。
22    //    この関数は、配列の内部ポインタを最後の要素に移動させます。
23    //    引数に &$array が指定されているため、配列自体が参照渡しで変更されます。
24    $lastElement = end($fruits);
25    echo "\nend()関数で取得した最後の要素: " . $lastElement . "\n";
26
27    // end()が呼ばれた後、内部ポインタは最後の要素を指しています。
28    echo "end()実行後、現在の内部ポインタが指す要素: " . current($fruits) . "\n";
29
30    // 2. 配列の内部ポインタをリセットします。
31    //    reset()はポインタを先頭に移動させ、最初の要素の値を返します。
32    //    whileループで先頭から要素を処理するために必要です。
33    reset($fruits);
34    echo "\nreset()実行後、現在の内部ポインタが指す要素: " . current($fruits) . "\n";
35
36    echo "\n--- endwhile構文を使用したwhileループでの要素処理 ---\n";
37    // 3. endwhile構文を使用して配列の要素をループ処理します。
38    //    current()で現在の要素を取得し、next()でポインタを次に進めます。
39    //    endwhileはwhileループの終了を示す代替記法です。
40    while ($fruit = current($fruits)):
41        echo "処理中の要素: " . $fruit . "\n";
42        next($fruits); // 内部ポインタを次の要素に進めます
43    endwhile;
44
45    // ループ終了後、内部ポインタは配列の終端を超過しているため、current()はfalseを返します。
46    echo "\nwhileループ終了後、現在の内部ポインタが指す要素: " . var_export(current($fruits), true) . " (配列の終端を超過)\n";
47
48    // 4. ループ後に再度end()関数を使用してみます。
49    //    ポインタが終端を超過していても、end()は正しく最後の要素にポインタを移動させ、その値を返します。
50    $lastElementAgain = end($fruits);
51    echo "ループ後にend()関数で取得した最後の要素: " . $lastElementAgain . "\n";
52}
53
54// 関数を実行して動作を確認します
55demonstrateArrayPointerAndEndWhileSyntax();

PHPのend()関数は、指定された配列の内部ポインタを最終要素に移動させ、その要素の値を返す関数です。引数array &$arrayが示すように、配列自体が参照渡しで渡されるため、end()を呼び出すと元の配列の内部ポインタが最終要素を指すよう変更されます。戻り値mixedは、配列の最後の要素の値を返しますが、配列が空の場合はfalseを返します。この関数は、配列の最後の要素を効率的に取得する際に特に便利です。

一方、endwhilewhileループの終了を示す代替構文です。通常のwhile (条件) { ... }というブロック記法の代わりに、while (条件): ... endwhile;と記述することで、特にPHPのコードとHTMLが混在するテンプレートファイルなどで、ループの開始と終了をより明確に区別しやすくします。機能的には通常のwhileループと全く同じです。

サンプルコードでは、まずend()関数を使用して配列の最後の要素を取得し、内部ポインタが最終要素へ移動する挙動を示しています。その後、reset()関数でポインタを配列の先頭に戻し、current()next()を組み合わせ、endwhile構文のwhileループで配列の要素を順番に処理しています。このように、end()関数は配列の内部ポインタを効率的に操作し、endwhile構文はループ処理の記述スタイルを柔軟に選択できるため、PHPでの配列処理やコードの可読性向上に役立ちます。

end()関数は、配列の最後の要素を取得するだけでなく、配列の内部ポインタを最終要素に移動させる副作用を持つことに注意が必要です。このポインタ変更により、その後のcurrent()などの関数が返す値に影響が出るため、ポインタを意識しないforeachループなどと併用する際は特に気を付けてください。必要に応じてreset()関数でポインタを先頭に戻すことができます。

endwhile構文は、whileループの終了を示す代替記法であり、while (...) { ... }と同じ意味を持ちます。特にテンプレートファイルでHTMLとPHPを混在させる際に用いられることが多いですが、通常のスクリプトでは波括弧{}記法が推奨されます。この構文を使用する際は、endwhileの後にセミコロン(;)が必要な点に注意してください。配列の要素を順に処理する場合は、current()next()を手動で使うよりも、foreachループを使用する方がより簡潔で一般的です。

関連コンテンツ

関連プログラミング言語