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

PHPでオブジェクトの配列からプロパティを抽出する方法

PHPでオブジェクトの配列を扱う際、各オブジェクトが持つ特定のプロパティだけを取り出したいケースはよくあります。ここでは、以下のようなコードから my_object 変数内の各オブジェクトの id を抽出する方法を解説します。

例:対象となるデータ

$my_object = Array
(
    [0] => stdClass Object
        (
            [id] => 12
        ),
    [1] => stdClass Object
        (
            [id] => 33
        ),
    [2] => stdClass Object
        (
            [id] => 59
        )
)

この配列には3つの stdClass オブジェクトが格納されており、それぞれが id プロパティを持っています。この中から id の値だけをまとめて配列として取得するのが目的です。

方法1:array_map 関数を使う(古いバージョンの PHP 向け)

PHP 5.3 以前などの古いバージョンでは、array_map 関数と create_function を組み合わせることで実現できます。

$object_id = array_map(create_function('$o', 'return $o->id;'), $objects);

このコードでは、無名関数を使って各オブジェクトの id プロパティを順番に返し、その結果を新しい配列として受け取ります。

方法2:array_column 関数を使う(PHP 5.5 以降)

PHP 5.5 以上を使用している場合は、よりシンプルで推奨される array_column 関数が利用できます。

$object_id = array_column($my_object, 'id');

array_column は第1引数に配列、第2引数に取得したいプロパティ名(キー)を指定するだけで、該当する値だけを抜き出してくれます。コードが簡潔になり、可読性も大幅に向上します。

出力結果

いずれの方法でも、実行すると次の出力が得られます。

[12, 33, 59]

まとめ

PHP 5.5 以降の環境であれば array_column を使うのが最も簡単で効率的です。古い環境では array_map を活用しましょう。なお、PHP 7 以降では create_function は非推奨となっているため、その場合はクロージャ(無名関数)を直接記述する方法が安全です。

  1. PHPで配列からカン区切りのリストを作成する方法

    PHPでは、implode() 関数を使うことで、配列の要素を簡単にカン区切りの文字列(リスト)に変換できます。この関数は第一引数に区切り文字、第二引数に配列を指定します。 implode()関数の基本構文 implode(区切り文字, 配列) それでは、具体的なコード例を見ていきましょう。 例1:文字列の配列をカン区切りのリストに変換する 次の例では、前後に空白を含む文字列の配列を用意し、まずそのままカン区切りのリストに変換しています。その後、array_map() 関数と trim() を組み合わせて、各要素から余分な空白を取り除いた結果も表示しています。 <?php  

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

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