【PHP8.x】current関数の使い方
current関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
current関数は、配列の内部ポインタが現在指している要素の値を取得する関数です。
PHPの配列には、現在注目している要素の位置を示す「内部ポインタ」という仕組みがあります。このcurrent関数は、その内部ポインタが現在指している要素の「値」を返します。配列の要素を順番に処理する際など、現在の要素の値を取得したい場合に利用されます。
この関数を実行しても、配列の内部ポインタ自体の位置は移動しません。ポインタを次の要素や前の要素に移動させるには、next()やprev()といった別の関数を使用する必要があります。
配列が空の場合や、内部ポインタが配列の範囲外(例えば、末尾を超えた位置)を指している場合には、current関数はfalseを返します。そのため、返り値がfalseでないかを確認することが重要です。
current関数は、配列内の現在の要素の値を読み取るために用いられます。
構文(syntax)
1current(array $array): mixed
引数(parameters)
array &$array
- array &$array: 現在の配列要素への参照
戻り値(return)
mixed
現在指している配列要素の値を返します。
サンプルコード
PHP current()で配列の現在要素を取得する
1<?php 2 3/** 4 * current() 関数を使って配列の現在の要素を取得するサンプルコード 5 */ 6 7// 配列を定義 8$fruits = ['apple', 'banana', 'orange']; 9 10// current() 関数を使って現在の要素を取得 11$current_fruit = current($fruits); 12 13// 結果を出力 14echo "現在の要素: " . $current_fruit . PHP_EOL; // 出力: 現在の要素: apple 15 16// 配列のポインタを次に移動 17next($fruits); 18 19// もう一度 current() 関数を使って現在の要素を取得 20$current_fruit = current($fruits); 21 22// 結果を出力 23echo "現在の要素: " . $current_fruit . PHP_EOL; // 出力: 現在の要素: banana 24 25// 配列のポインタを最後に移動 26end($fruits); 27 28// current() 関数を使って現在の要素を取得 29$current_fruit = current($fruits); 30 31// 結果を出力 32echo "現在の要素: " . $current_fruit . PHP_EOL; // 出力: 現在の要素: orange 33 34// ポインタが範囲外の場合 35next($fruits); 36$current_fruit = current($fruits); 37if ($current_fruit === false) { 38 echo "現在の要素は存在しません" . PHP_EOL; //出力: 現在の要素は存在しません 39} 40 41?>
current()関数は、PHPの配列において、内部ポインタが指し示している現在の要素を返します。この関数は、引数として配列 $array を参照渡しで受け取ります。つまり、元の配列が直接操作されることはありません。
サンプルコードでは、まず $fruits という配列を定義し、current()関数を使って最初の要素である "apple" を取得しています。next()関数を使うと、配列の内部ポインタが次の要素に進み、current()関数で "banana" が取得できます。同様に、end()関数でポインタを配列の最後に移動させると、current()関数は "orange" を返します。
重要な点として、current()関数は配列の内容を変更せず、あくまで現在のポインタ位置にある要素を返すだけです。また、ポインタが配列の範囲外を指している場合(例えば、next()関数を繰り返し呼び出して配列の末尾を超えた場合)、current()関数は false を返します。サンプルコードでは、このfalseが返るケースをチェックし、要素が存在しないことを確認しています。current()関数は、配列を操作する上で、現在の要素を安全に取得するために非常に役立ちます。配列の要素を順番に処理する際などに活用できます。
current()関数は、配列の内部ポインタが指す現在の要素を返します。ポインタは配列の最初の要素を指すように初期化されますが、next()、prev()、reset()、end()といった関数で移動できます。current()はポインタの位置を変更しません。
注意点として、配列が空の場合や、ポインタが配列の範囲外を指している場合、current()はfalseを返します。falseが返る場合と、配列にfalseが格納されている場合を区別するために、===演算子を使用することを推奨します。
また、current()は配列そのものではなく、現在の要素の値を返すため、要素の値を直接変更することはできません。要素の値を変更したい場合は、$array[key($array)] = 新しい値; のように、キーを指定してアクセスする必要があります。
PHP current()で配列要素をタイムスタンプとして取得する
1<?php 2 3/** 4 * current() 関数とタイムスタンプの利用例 5 * 6 * 配列内の現在要素をタイムスタンプに変換して表示します。 7 */ 8function demonstrateCurrentTimestamp() { 9 $timestamps = [ 10 'event1' => strtotime('2024-01-01'), 11 'event2' => strtotime('2024-02-15'), 12 'event3' => strtotime('2024-03-20') 13 ]; 14 15 // 現在の要素を取得 16 $currentTimestamp = current($timestamps); 17 18 // タイムスタンプを日付形式に変換して表示 19 echo "現在のタイムスタンプ: " . $currentTimestamp . "\n"; 20 echo "日付形式: " . date('Y-m-d H:i:s', $currentTimestamp) . "\n"; 21 22 // 配列の内部ポインタを次に進める 23 next($timestamps); 24 25 // 次の要素を取得 26 $nextTimestamp = current($timestamps); 27 28 // タイムスタンプを日付形式に変換して表示 29 echo "次のタイムスタンプ: " . $nextTimestamp . "\n"; 30 echo "日付形式: " . date('Y-m-d H:i:s', $nextTimestamp) . "\n"; 31} 32 33// 関数を実行 34demonstrateCurrentTimestamp(); 35 36?>
PHPのcurrent()関数は、配列の内部ポインタが指す現在の要素を返します。引数には、参照渡しで配列$arrayを指定します。内部ポインタは、配列内のどの要素が現在アクセスされているかを示すもので、current()関数はこのポインタが指す要素の値を返します。もし内部ポインタが配列の範囲外を指している場合は、current()関数はfalseを返します。
このサンプルコードでは、strtotime()関数を使って日付文字列をタイムスタンプ(Unixエポックからの秒数)に変換し、それを配列に格納しています。current()関数を使って配列の現在の要素(最初の要素)のタイムスタンプを取得し、date()関数を使ってタイムスタンプを人間が読みやすい日付形式に変換して表示しています。
その後、next()関数を使って配列の内部ポインタを次の要素に進め、再度current()関数で次の要素のタイムスタンプを取得し、同様に日付形式に変換して表示しています。この例では、current()関数が配列の内部ポインタの位置に応じて異なる値を返すことを示しています。current()関数は、配列の要素を順番に処理する際に、現在の要素の値を取得するために役立ちます。なお、current()関数は内部ポインタの位置を変更しないため、同じ要素を何度も取得できます。
current()関数は、配列の内部ポインタが指す現在の要素を返します。引数の配列は参照渡し(&$array)なので、関数内でポインタが移動すると元の配列にも影響します。next()関数などで内部ポインタを移動させると、current()が返す値も変わる点に注意が必要です。
サンプルコードでは、strtotime()関数で文字列からタイムスタンプを取得していますが、無効な文字列を渡すとfalseが返る可能性があります。date()関数でタイムスタンプを日付形式に変換する際は、タイムゾーンの設定を確認してください。意図しない日時が表示されることがあります。また、current()は配列が空の場合や、内部ポインタが配列の範囲外を指している場合はfalseを返すため、戻り値がfalseでないか確認するとより安全です。