【PHP8.x】array_pop関数の使い方

作成日: 更新日:

array_pop関数は、指定された配列の末尾から要素を一つ取り除き、その値を取得する関数です。この関数は、引数として渡された配列の最後の要素を削除し、削除された要素の値を戻り値として返します。配列の要素は、インデックスが一つずつ詰められます。

例えば、複数のデータが格納された配列があり、その中で最も新しく追加された要素(配列の末尾にある要素)だけを処理したい場合などに役立ちます。この関数を使用すると、元の配列は変更され、要素が一つ減った状態になります。そのため、array_pop関数を呼び出した後も元の配列を利用する際には、要素が削除された状態であることを考慮する必要があります。

引数には操作対象となる配列を指定します。もし指定された配列が空の場合や、配列ではない値が引数として渡された場合は、nullが返されます。スタック(後入れ先出し、LIFO)の概念でデータを扱う際などに非常に便利な関数です。PHPの標準関数として提供されており、特別な設定なしに利用することができます。

基本的な使い方

構文(syntax)

array_pop(array &$array): mixed

引数(parameters)

array &$array

  • array &$array: 要素を削除して返す対象の配列。配列は参照渡しされるため、元の配列も変更されます。

戻り値(return)

mixed

配列の末尾から要素を1つ取り出し、その要素の値を返します。配列は末尾の要素が削除された状態で更新されます。

サンプルコード

array_popで配列末尾要素を取得する

<?php

/**
 * array_pop関数の基本的な使用例を示します。
 * array_popは配列の末尾から要素を取り出し、配列を短縮する関数です。
 * キーワード「pop by index」に関連して、この関数は特定のインデックスを指定するのではなく、常に配列の最後の要素を操作します。
 */

// 1. サンプル配列を定義します。
$fruits = ['apple', 'banana', 'cherry', 'date'];

echo "--- array_popの基本的な使用例 ---\n";
echo "元の配列:\n";
print_r($fruits);

// array_pop関数を実行し、配列の最後の要素を取り出します。
// 配列は参照渡しで変更されます。
$lastFruit = array_pop($fruits);

echo "\n取り出された要素: " . $lastFruit . "\n";
echo "array_pop後の配列:\n";
print_r($fruits);

// 2. 配列が空の場合のarray_popの挙動
echo "\n--- 空の配列でのarray_popの挙動 ---\n";
$emptyArray = [];
echo "元の空の配列:\n";
print_r($emptyArray);

$resultFromEmpty = array_pop($emptyArray);

echo "\n空の配列から取り出された要素:\n";
var_dump($resultFromEmpty); // 空の配列からはnullが返されます。
echo "array_pop後の空の配列:\n";
print_r($emptyArray);

?>

PHPのarray_pop関数は、配列の末尾から要素を一つ取り出し、その要素を返す機能を持つ関数です。この関数は、引数で渡された配列自体を変更し、末尾の要素が削除された新しい状態にします。

array_pop関数の引数array &$arrayは、変更したい配列を参照渡しで受け取ります。これにより、関数内で配列が直接操作され、元の配列から末尾の要素が取り除かれます。キーワードとして提示された「pop by index」に関連して、array_popは特定のインデックスを指定するのではなく、常に配列の「最後の要素」を操作するという点にご注意ください。

戻り値はmixed型で、取り出された要素の値が返されます。例えば、['apple', 'banana', 'cherry', 'date']という配列にarray_popを適用すると、'date'が戻り値として返され、元の配列は['apple', 'banana', 'cherry']となります。もし、array_popを呼び出した時点で配列が空の場合、取り出す要素がないため、戻り値としてnullが返されます。サンプルコードでは、$fruits配列から'date'が取り出され、元の配列が短縮される様子、また空の配列から呼び出した際にnullが返される様子が示されています。

array_pop関数は、配列の末尾の要素を常に一つだけ取り出す関数です。キーワードにある「by index」のように、特定のインデックスを指定して要素を取り出すことはできません。この関数を実行すると、引数として渡した元の配列自体が変更され、末尾の要素が一つ減りますので、元の配列を保持したい場合は事前にコピーを作成してください。また、配列から取り出された要素が戻り値として返されますが、空の配列に対してarray_popを実行した場合は、要素は何も取り出されず**nullが返されます**。そのため、戻り値の型や値を適切にチェックし、予期せぬ挙動を避けるようにしましょう。

PHP: array_popを複数回実行する

<?php

/**
 * 配列の末尾から指定された数の要素を取り出す関数です。
 * array_pop関数を複数回実行することで、配列から複数の要素を削除し、
 * それらを新しい配列として返します。
 *
 * @param array $array 処理対象の配列(参照渡しにより、元の配列が変更されます)。
 * @param int $numToPop 取り出す要素の数。
 * @return array 取り出された要素の配列。要素は元の配列の末尾に近いものから順に並びます。
 */
function arrayPopMultiple(array &$array, int $numToPop): array
{
    $poppedElements = []; // 取り出された要素を格納する新しい配列

    // 取り出す要素の数が元の配列の総数を超えないように調整します。
    // 例: 要素が3つの配列から5つ取り出そうとしても、実際には3つしか取り出せません。
    $actualNumToPop = min($numToPop, count($array));

    // 指定された回数だけ array_pop を繰り返します。
    for ($i = 0; $i < $actualNumToPop; $i++) {
        // array_popは配列の末尾から1つの要素を取り出し、元の配列からその要素を削除します。
        $element = array_pop($array);

        // 取り出された要素を $poppedElements の先頭に追加します。
        // 例: ['a', 'b', 'c', 'd', 'e'] から3つ取り出す場合、
        // 'e', 'd', 'c' の順に取り出されますが、array_unshift を使うことで、
        // 結果の配列は ['c', 'd', 'e'] となります(末尾に近いものから順)。
        array_unshift($poppedElements, $element);
    }

    return $poppedElements;
}

// --- 使用例 ---

// 基本的な使用例
$myArray = ['apple', 'banana', 'cherry', 'date', 'elderberry'];
echo "元の配列: [" . implode(', ', $myArray) . "]\n";

// 配列の末尾から3つの要素を取り出す
$removedElements = arrayPopMultiple($myArray, 3);
echo "取り出された要素: [" . implode(', ', $removedElements) . "]\n"; // 出力: [cherry, date, elderberry]
echo "残りの配列: [" . implode(', ', $myArray) . "]\n\n"; // 出力: [apple, banana]

// 配列の要素数より多く取り出そうとする場合の例
$numbers = [10, 20, 30];
echo "元の配列: [" . implode(', ', $numbers) . "]\n";
$removedNumbers = arrayPopMultiple($numbers, 5); // 5つ指定しても、存在する3つだけが取り出される
echo "取り出された要素: [" . implode(', ', $removedNumbers) . "]\n"; // 出力: [10, 20, 30]
echo "残りの配列: [" . implode(', ', $numbers) . "]\n\n"; // 出力: []

// 空の配列から取り出そうとする場合の例
$emptyArray = [];
echo "元の配列: [" . implode(', ', $emptyArray) . "]\n";
$removedEmpty = arrayPopMultiple($emptyArray, 2);
echo "取り出された要素: [" . implode(', ', $removedEmpty) . "]\n"; // 出力: []
echo "残りの配列: [" . implode(', ', $emptyArray) . "]\n";

PHPのarray_pop関数は、配列の末尾から要素を1つ取り出し、元の配列からその要素を削除する機能を提供します。この関数は、スタック(後入れ先出し)のようなデータ構造を扱う際に非常に便利です。

提供されたサンプルコードでは、このarray_pop関数を複数回利用して、配列の末尾から指定された数の要素をまとめて取り出すarrayPopMultipleというカスタム関数が定義されています。この関数は、第一引数に渡された配列を参照渡しで受け取るため、元の配列自身が変更されます。具体的には、末尾から要素が指定された数だけ削除されます。

arrayPopMultipleの第二引数で取り出す要素の数を指定します。もし指定された数が配列の総要素数を超える場合でも、関数は存在する要素の数だけを安全に取り出します。戻り値としては、取り出された要素が新しい配列として返されます。このとき、要素は元の配列の末尾に近いものから順に格納されており、例えば['a', 'b', 'c', 'd', 'e']から3つ取り出すと、['c', 'd', 'e']という結果が得られます。

使用例では、['apple', 'banana', 'cherry', 'date', 'elderberry']から3つの要素を取り出すと、元の配列は['apple', 'banana']となり、取り出された要素は['cherry', 'date', 'elderberry']となります。このように、複数の要素を一度に効率よく削除し、取得することが可能です。

このサンプルコードで定義されているarrayPopMultiple関数は、引数で渡された配列そのものを変更します(参照渡し)。そのため、関数を実行すると元の配列から要素が削除され、配列の要素数が減る点に注意が必要です。取り出す要素の数を元の配列の要素数より多く指定してもエラーにはならず、存在するすべての要素が取り出されて残りの配列は空になります。取り出された要素は、元の配列の末尾に近いものから順に並んだ新しい配列として返されますので、この戻り値の順序も理解して利用してください。

【PHP8.x】array_pop関数の使い方 | いっしー@Webエンジニア