【PHP8.x】array_values関数の使い方
『array_values関数は、引数として渡された配列からすべての値を取り出し、それらを要素とする新しい添字配列を生成して返す関数です。この関数の重要な特徴は、返される配列のキーが必ず0から始まる連続した整数(インデックス)に置き換えられる点にあります。元の配列が文字列をキーとして持つ連想配列であっても、あるいはキーが不連続な数値を持つ配列であっても、この関数は元のキーをすべて破棄します。そして、値だけを元の配列の順序を維持したまま抽出し、0番目から順に新しいインデックスを割り当てます。例えば、連想配列から値のリストだけが必要な場合や、キーが乱れた配列を整理して、forループなどで扱いやすい単純な数値添字配列に変換したい場合に非常に便利です。この関数は、配列の構造を簡素化し、値そのものに焦点を当てた処理を行う際に役立ちます。返り値は、入力配列の値だけを含んだ、キーが0から始まる新しい添字配列となります。』
基本的な使い方
構文(syntax)
<?php
$originalArray = [
"firstName" => "John",
"lastName" => "Doe",
"age" => 30
];
$valuesArray = array_values($originalArray);
?>
引数(parameters)
array $array
- array $array: 値を取得したい配列を指定する
戻り値(return)
array
与えられた配列のすべての値を含む新しい配列を返します。
サンプルコード
PHP array_valuesで多次元配列を再インデックス化する
<?php
/**
* 多次元配列で array_values を使用する例
*
* array_values は、配列のキーを無視して値だけを新しい配列に再インデックス化します。
* 多次元配列の場合、array_values は一番外側の配列に対してのみ適用されます。
*/
$multiDimensionalArray = [
'outerKey1' => [
'innerKey1' => 'value1',
'innerKey2' => 'value2',
],
'outerKey2' => [
'innerKey3' => 'value3',
'innerKey4' => 'value4',
],
];
// array_values を使用して、外側のキーを再インデックス化します。
$indexedArray = array_values($multiDimensionalArray);
// 結果を出力します (デバッグ用)。
print_r($indexedArray);
/*
出力例:
Array
(
[0] => Array
(
[innerKey1] => value1
[innerKey2] => value2
)
[1] => Array
(
[innerKey3] => value3
[innerKey4] => value4
)
)
*/
PHPのarray_values
関数は、配列のキーを破棄し、値のみを取り出して新しい配列を生成する関数です。引数には処理対象の配列 $array
を渡します。この関数は、キーと値のペアを持つ連想配列から、値だけを順番に並べたインデックス配列を作成する際に役立ちます。
サンプルコードでは、多次元配列 $multiDimensionalArray
を使用しています。array_values
関数をこの配列に適用すると、一番外側の配列のキー('outerKey1', 'outerKey2')が破棄され、値である内側の配列が新しいインデックス配列 $indexedArray
に格納されます。
つまり、多次元配列に対してarray_values
関数を使用した場合、内側の配列構造はそのまま保持され、外側の配列のキーのみが再インデックス化されるという挙動になります。
出力例を見ると、元の連想配列の外側のキーが0, 1というインデックスに置き換わり、各インデックスには内側の配列が格納されていることがわかります。この関数は、データベースから取得したデータなど、キーが不要な場合に配列を整理するために利用できます。戻り値は、再インデックス化された配列です。
array_values
関数は、配列のキーを捨てて値のみを抽出し、新しい0からの数値キーで再インデックス化する機能を持っています。多次元配列に対してこの関数を使用した場合、一番外側の配列のキーのみが再インデックス化され、内側の配列のキーは変更されないという点に特に注意が必要です。
初心者は多次元配列のすべての階層のキーが再インデックス化されると誤解しやすいため、この挙動を正確に理解しておくことが重要です。もし内側の配列も再インデックス化したい場合は、ループ処理などを利用して明示的に各階層にarray_values
を適用する必要があります。意図しないデータの構造変化を防ぎ、安全かつ正しくコードを記述するためにも、処理対象が多次元配列である場合は関数の適用範囲と期待する結果を必ず確認してください。
PHP連想配列から値のみを取得する
<?php
declare(strict_types=1);
/**
* 連想配列に対して array_values() を使用する例を示します。
*
* array_values() は、連想配列のキーを破棄し、
* 値だけを抽出して、キーが0から始まる新しい配列(インデックス配列)を返します。
*/
function demonstrateArrayValuesWithAssociativeArray(): void
{
// 'name', 'age', 'job' という文字列のキーを持つ連想配列を定義します。
$userProfile = [
'name' => '山田 太郎',
'age' => 30,
'job' => 'システムエンジニア',
];
echo '--- 元の連想配列 ---' . PHP_EOL;
print_r($userProfile);
// array_values() を使って、連想配列から値のみを抽出します。
$valuesOnly = array_values($userProfile);
echo PHP_EOL . '--- array_values() 適用後の配列 ---' . PHP_EOL;
print_r($valuesOnly);
}
// 関数を実行して結果を表示します。
demonstrateArrayValuesWithAssociativeArray();
PHPのarray_values()
関数は、引数として渡された配列から全ての値を取り出し、それらを要素とする新しい配列を作成して返します。この関数は特に、文字列などのキーを持つ「連想配列」から、値のリストだけを順番に取得したい場合に便利です。
この関数の引数には、値を取り出したい配列を1つ指定します。サンプルコードでは、ユーザーのプロフィール情報を格納した連想配列$userProfile
が引数として渡されています。
array_values()
を実行すると、元の連想配列が持っていたキー('name', 'age', 'job')はすべて破棄されます。そして、値の部分('山田 太郎', 30, 'システムエンジニア')だけを抽出し、キーが0から始まる新しい「数値添字配列(インデックス配列)」を戻り値として返します。
サンプルコードでは、この処理によって$userProfile
から値のみが抽出され、[0 => '山田 太郎', 1 => 30, 2 => 'システムエンジニア']
という構造の新しい配列が生成され、変数$valuesOnly
に代入されていることがわかります。このように、元のキー情報は不要で、値の集まりだけを扱いたい場面で活用できます。
array_values
関数は、連想配列のキーをすべて破棄し、その値だけを抽出して、キーが0から始まる新しい数値インデックス配列を生成します。この関数は元の配列自体を変更するのではなく、新しい配列を返しますので、必ず変数に代入して結果を利用してください。キー情報が不要で、値のリストだけを取り出したい場合に特に有用です。どのような場合でも戻り値は配列型となりますが、元のキー情報は失われるため、元のキーが必要な場合は他の方法を検討する必要があります。