PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPで数値キーを持つ配列を返す方法【foreachとarray_valuesの使い方】

PHPで連想配列のデータをもとに、数値キーを持つ配列を作成したい場合は、foreachループ[](角括弧)を組み合わせて新しい配列を構築し、最後にarray_values()関数を適用するのが効果的です。

以下の手順で処理を行います。

  • foreachループで元の配列の各要素を取り出す
  • 任意の値(ここではid)をキーとして新しい配列にデータを格納する
  • array_values()でキーを0から始まる連番の数値キーに振り直す

サンプルコード

<!DOCTYPE html>
<html>
<body>
<?php
$details = [
    [
        "id" => "10001",
        "firstName" => "John",
        "lastName" => "Doe"
    ],
    [
        "id" => "10002",
        "firstName" => "David",
        "lastName" => "Miller"
    ]
];
foreach ($details as $k=> $v) {
    $someDetails[$v['id']][] = ['LASTNAME' => $v['lastName'], 'FIRSTNAME'=> $v['firstName']];
}
print_r(array_values($someDetails));
?>
</body>
</html>

コードの解説

元の配列 $details には、「id」「firstName」「lastName」という文字列キーを持つ連想配列が複数格納されています。

foreachループ内では、各ユーザーの id をキーとして新しい配列 $someDetails に姓名データを追加していきます。この時点では配列のキーが「10001」「10002」という文字列になっています。

そこで最後に array_values() を呼び出すことで、これらのキーが0から始まる連番の数値キーに変換され、整形された配列として出力されます。

出力結果

Array ( [0] => Array ( [0] => Array ( [LASTNAME] => Doe [FIRSTNAME] => John ) ) [1] => Array ( [0] => Array ( [LASTNAME] => Miller [FIRSTNAME] => David ) ) )

array_values()関数とは

array_values() は、配列のすべての値を取得し、キーを0から始まる連続した数値にリセットして返す関数です。文字列キーや不連続な数値キーを持つ配列を、標準的なインデックス配列へ変換したい場合に非常に便利です。JSONレスポンスの整形やAPIの出力などでもよく使われるテクニックなので、覚えておくと役立ちます。

  1. PHPのarray()関数とは?配列の作成方法をわかりやすく解説

    PHPのarray()関数は、配列を作成するための関数です。PHPにおける配列には、主に以下の3種類が存在します。インデックス配列 − 数値インデックス(0から始まる番号)で要素を管理する配列連想配列 − 文字列などの名前付きキーで要素を管理する配列多次元配列 − 配列の中に1つ以上の配列を含む、入れ子構造の配列構文// 数値インデックスを持つ配列(インデックス配列) array(value1, value2, ...); // 名前付きキーを持つ配列(連想配列) array(key1 => value1, key2 => value2, ...)パラメータvalue − 配列に

  2. PHPのmb_list_encodings()関数でサポートされている全エンコーディングを配列として取得する方法

    PHPのmb_list_encodings()関数は、現在の環境でサポートされているすべての文字エンコーディングを配列として返します。この関数はPHP 5以降のバージョンで利用可能です。マルチバイト文字列処理を行う際に、対応しているエンコーディングの一覧を確認したい場合に便利な関数です。構文array mb_list_encodings()パラメータmb_list_encodings()は引数を受け取りません。戻り値この関数は、サポートされているエンコーディング名を格納した数値インデックス付きの配列を返します。各要素には「UTF-8」や「SJIS」などのエンコーディング名が文字列として含まれま