【PHP8.x】array_values()関数の使い方
array_values関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
『array_values関数は、引数として渡された配列からすべての値を取り出し、それらを要素とする新しい添字配列を生成して返す関数です。この関数の重要な特徴は、返される配列のキーが必ず0から始まる連続した整数(インデックス)に置き換えられる点にあります。元の配列が文字列をキーとして持つ連想配列であっても、あるいはキーが不連続な数値を持つ配列であっても、この関数は元のキーをすべて破棄します。そして、値だけを元の配列の順序を維持したまま抽出し、0番目から順に新しいインデックスを割り当てます。例えば、連想配列から値のリストだけが必要な場合や、キーが乱れた配列を整理して、forループなどで扱いやすい単純な数値添字配列に変換したい場合に非常に便利です。この関数は、配列の構造を簡素化し、値そのものに焦点を当てた処理を行う際に役立ちます。返り値は、入力配列の値だけを含んだ、キーが0から始まる新しい添字配列となります。』
構文(syntax)
1<?php 2$originalArray = [ 3 "firstName" => "John", 4 "lastName" => "Doe", 5 "age" => 30 6]; 7 8$valuesArray = array_values($originalArray); 9?>
引数(parameters)
array $array
- array $array: 値を取得したい配列を指定する
戻り値(return)
array
与えられた配列のすべての値を含む新しい配列を返します。
サンプルコード
PHP array_values で多次元配列を数値添字配列にする
1<?php 2 3/** 4 * array_values() 関数が多次元配列に適用された際の動作を示すサンプルコード。 5 * 6 * array_values() は、配列のすべての値を数値添字の新しい配列として返します。 7 * 多次元配列の場合、最上位のキーのみが破棄され、その値(内部の配列も含む)が新しい数値添字の配列として格納されます。 8 * 内部の配列のキー構造には影響を与えません。 9 */ 10 11// 元の多次元配列を定義 12$multiDimensionalArray = [ 13 'fruits' => [ 14 'apple' => 'red', 15 'banana' => 'yellow', 16 'grape' => 'purple', 17 ], 18 'vegetables' => [ 19 'carrot' => 'orange', 20 'potato' => 'brown', 21 'onion' => 'white', 22 ], 23 0 => 'miscellaneous_item', // 既存の数値キーも持つ要素 24]; 25 26echo "--- 元の多次元配列 ---\n"; 27print_r($multiDimensionalArray); 28 29// array_values() を多次元配列に適用 30// 最上位のキー ('fruits', 'vegetables', 0) が破棄され、 31// それぞれの値 (内部の配列や文字列) が数値添字の新しい配列として再インデックスされます。 32$resultArray = array_values($multiDimensionalArray); 33 34echo "\n--- array_values() 適用後の配列 ---\n"; 35print_r($resultArray); 36 37// 出力からわかること: 38// 1. 元の連想キー 'fruits' と 'vegetables' は削除され、0と1の数値キーに置き換わっています。 39// 2. 元の数値キー '0' も、再インデックスの結果、新しい配列では2番目の要素(キー1)になっています。 40// 3. 内部の配列(例: ['apple' => 'red', ...])のキーと値の構造はそのまま保持されています。 41// array_values() はネストされた配列の内部構造には影響を与えません。 42
PHP 8のarray_values関数は、指定された配列の全ての値を抽出し、新しい数値添字の配列として返す機能を提供します。引数には操作対象となる配列を一つ指定し、戻り値は0から始まる連続した数値キーが付与された新しい配列となります。この関数は、元の配列が持っていた連想キー(文字列キー)や既存の数値キーをすべて破棄し、値のみを新しい配列として再インデックスします。
サンプルコードは、多次元配列にarray_valuesを適用した場合の動作を示しています。$multiDimensionalArrayは、連想キーと数値キーが混在する多次元配列として定義されています。array_values()を適用すると、この配列の最上位のキー、具体的には'fruits', 'vegetables', そして0が破棄されます。そして、それらの値(内部の配列や文字列'miscellaneous_item')が、0, 1, 2という新しい数値キーを持つ$resultArrayの要素として順番に格納されます。
このとき重要なのは、array_values()が内部にネストされた配列のキー構造には影響を与えない点です。例えば、['apple' => 'red', 'banana' => 'yellow']のような内部配列は、そのキーと値の関連性がそのまま保持されます。array_values()は最上位の階層のキーのみを再インデックスし、ネストされた配列の内部構造は変更しません。
array_values関数は、配列の最上位のキーのみを破棄し、その値をゼロから始まる連続した数値キーで再インデックスします。多次元配列に適用した場合でも、ネストされた内部配列のキーと値の構造には影響を与えません。内部配列はそのままの値として新しい配列に格納されますので、多次元配列全体をフラット化する目的では利用できない点にご注意ください。また、元の配列に既存の数値キーが含まれていても、結果的にはすべてのキーが0から振り直されるため、元の数値キーの位置関係が変わる点も誤解しやすいポイントです。この関数は、配列の値だけを取り出して新しい数値添字の配列として扱いたい場合に適切です。
PHP連想配列の値を取得し文字列に変換する
1<?php 2 3/** 4 * 連想配列の値を抽出し、それらをカンマ区切りの文字列に変換するサンプル。 5 * システムエンジニアを目指す初心者が、配列の操作と文字列への変換を理解するのに役立ちます。 6 */ 7function processArrayValuesToString(): void 8{ 9 // サンプルとなる連想配列を定義します。 10 // キーと値のペアで構成されています。 11 $associativeArray = [ 12 'id' => 101, 13 'name' => '田中 太郎', 14 'email' => 'taro.tanaka@example.com', 15 'role' => '管理者' 16 ]; 17 18 echo "元の連想配列:\n"; 19 print_r($associativeArray); 20 21 // array_values() 関数を使用して、連想配列から値のみを抽出します。 22 // 結果は、数値インデックスの新しい配列になります。 23 // PHP 8では、引数の型ヒント 'array' に従い、配列が渡されることを期待します。 24 $valuesOnlyArray = array_values($associativeArray); 25 26 echo "\narray_values() で抽出された値の配列:\n"; 27 print_r($valuesOnlyArray); 28 29 // 抽出された値の配列を、カンマとスペースで区切られた一つの文字列に変換します。 30 // implode() 関数は、配列の要素を結合して文字列にします。 31 $valuesAsString = implode(', ', $valuesOnlyArray); 32 33 echo "\nカンマ区切りに変換された値の文字列:\n"; 34 echo $valuesAsString . "\n"; 35} 36 37// 関数を実行して、処理結果を表示します。 38processArrayValuesToString();
このサンプルコードは、PHPで連想配列から値のみを抽出し、それらの値をカンマ区切りの一つの文字列に変換する処理を具体的に示しています。
まず、キーと値のペアを持つ連想配列 $associativeArray を定義し、その内容を表示します。次に、array_values() 関数を使用します。この関数は、引数 array $array として渡された配列から、その「値」だけを抽出して、新しい数値インデックスを持つ配列として返します。PHP 8では引数に配列型を渡すことが求められます。この処理により、元の配列のキー情報は失われ、値のみで構成される新たな配列 $valuesOnlyArray が生成され、表示されます。
最後に、抽出された値の配列 $valuesOnlyArray を一つの文字列に変換するために implode() 関数を利用します。implode() は、配列の要素を指定した区切り文字(この例では「, 」)で結合し、文字列として返します。結果として、配列の各要素がカンマとスペースで区切られた $valuesAsString という文字列が生成され、画面に出力されます。このサンプルは、配列から必要なデータを抽出し、文字列として加工する基本的な手順を理解するのに役立ちます。
array_values()関数は、元の連想配列から値だけを取り出し、新しい数値インデックスの配列を生成します。元の配列のキー情報は失われ、0から始まる新しいインデックスが付与される点にご注意ください。抽出された値の配列をimplode()関数で文字列に変換する際、数値や真偽値なども自動的に文字列として結合されます。しかし、配列の要素に別の配列やオブジェクトが含まれる場合、それらは「Array」や「Object」といった文字列に変換されてしまい、期待通りの出力にならないことがあります。そのような場合は、事前に各要素を明示的に適切な文字列へ変換する処理を加えることを推奨いたします。
PHP array_valuesで多次元配列を再インデックス化する
1<?php 2 3/** 4 * 多次元配列で array_values を使用する例 5 * 6 * array_values は、配列のキーを無視して値だけを新しい配列に再インデックス化します。 7 * 多次元配列の場合、array_values は一番外側の配列に対してのみ適用されます。 8 */ 9 10$multiDimensionalArray = [ 11 'outerKey1' => [ 12 'innerKey1' => 'value1', 13 'innerKey2' => 'value2', 14 ], 15 'outerKey2' => [ 16 'innerKey3' => 'value3', 17 'innerKey4' => 'value4', 18 ], 19]; 20 21// array_values を使用して、外側のキーを再インデックス化します。 22$indexedArray = array_values($multiDimensionalArray); 23 24// 結果を出力します (デバッグ用)。 25print_r($indexedArray); 26 27/* 28出力例: 29Array 30( 31 [0] => Array 32 ( 33 [innerKey1] => value1 34 [innerKey2] => value2 35 ) 36 37 [1] => Array 38 ( 39 [innerKey3] => value3 40 [innerKey4] => value4 41 ) 42 43) 44*/
PHPのarray_values関数は、配列のキーを破棄し、値のみを取り出して新しい配列を生成する関数です。引数には処理対象の配列 $array を渡します。この関数は、キーと値のペアを持つ連想配列から、値だけを順番に並べたインデックス配列を作成する際に役立ちます。
サンプルコードでは、多次元配列 $multiDimensionalArray を使用しています。array_values関数をこの配列に適用すると、一番外側の配列のキー('outerKey1', 'outerKey2')が破棄され、値である内側の配列が新しいインデックス配列 $indexedArray に格納されます。
つまり、多次元配列に対してarray_values関数を使用した場合、内側の配列構造はそのまま保持され、外側の配列のキーのみが再インデックス化されるという挙動になります。
出力例を見ると、元の連想配列の外側のキーが0, 1というインデックスに置き換わり、各インデックスには内側の配列が格納されていることがわかります。この関数は、データベースから取得したデータなど、キーが不要な場合に配列を整理するために利用できます。戻り値は、再インデックス化された配列です。
array_values関数は、配列のキーを捨てて値のみを抽出し、新しい0からの数値キーで再インデックス化する機能を持っています。多次元配列に対してこの関数を使用した場合、一番外側の配列のキーのみが再インデックス化され、内側の配列のキーは変更されないという点に特に注意が必要です。
初心者は多次元配列のすべての階層のキーが再インデックス化されると誤解しやすいため、この挙動を正確に理解しておくことが重要です。もし内側の配列も再インデックス化したい場合は、ループ処理などを利用して明示的に各階層にarray_valuesを適用する必要があります。意図しないデータの構造変化を防ぎ、安全かつ正しくコードを記述するためにも、処理対象が多次元配列である場合は関数の適用範囲と期待する結果を必ず確認してください。
PHP連想配列から値のみを取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * 連想配列に対して array_values() を使用する例を示します。 7 * 8 * array_values() は、連想配列のキーを破棄し、 9 * 値だけを抽出して、キーが0から始まる新しい配列(インデックス配列)を返します。 10 */ 11function demonstrateArrayValuesWithAssociativeArray(): void 12{ 13 // 'name', 'age', 'job' という文字列のキーを持つ連想配列を定義します。 14 $userProfile = [ 15 'name' => '山田 太郎', 16 'age' => 30, 17 'job' => 'システムエンジニア', 18 ]; 19 20 echo '--- 元の連想配列 ---' . PHP_EOL; 21 print_r($userProfile); 22 23 // array_values() を使って、連想配列から値のみを抽出します。 24 $valuesOnly = array_values($userProfile); 25 26 echo PHP_EOL . '--- array_values() 適用後の配列 ---' . PHP_EOL; 27 print_r($valuesOnly); 28} 29 30// 関数を実行して結果を表示します。 31demonstrateArrayValuesWithAssociativeArray();
PHPのarray_values()関数は、引数として渡された配列から全ての値を取り出し、それらを要素とする新しい配列を作成して返します。この関数は特に、文字列などのキーを持つ「連想配列」から、値のリストだけを順番に取得したい場合に便利です。
この関数の引数には、値を取り出したい配列を1つ指定します。サンプルコードでは、ユーザーのプロフィール情報を格納した連想配列$userProfileが引数として渡されています。
array_values()を実行すると、元の連想配列が持っていたキー('name', 'age', 'job')はすべて破棄されます。そして、値の部分('山田 太郎', 30, 'システムエンジニア')だけを抽出し、キーが0から始まる新しい「数値添字配列(インデックス配列)」を戻り値として返します。
サンプルコードでは、この処理によって$userProfileから値のみが抽出され、[0 => '山田 太郎', 1 => 30, 2 => 'システムエンジニア']という構造の新しい配列が生成され、変数$valuesOnlyに代入されていることがわかります。このように、元のキー情報は不要で、値の集まりだけを扱いたい場面で活用できます。
array_values関数は、連想配列のキーをすべて破棄し、その値だけを抽出して、キーが0から始まる新しい数値インデックス配列を生成します。この関数は元の配列自体を変更するのではなく、新しい配列を返しますので、必ず変数に代入して結果を利用してください。キー情報が不要で、値のリストだけを取り出したい場合に特に有用です。どのような場合でも戻り値は配列型となりますが、元のキー情報は失われるため、元のキーが必要な場合は他の方法を検討する必要があります。