Php/docs/function.array-column

提供:Dev Guides
< Php
移動先:案内検索

array_column

(PHP 5 >= 5.5.0, PHP 7)

array_column入力配列から単一のカラムの値を返す


説明

array_column ( array $array , int|string|null $column_key [, int|string|null $index_key = null ] ) : array

array_column() は、 配列 array の中から column_key で指定した単一のカラムの値を返します。 オプションで index_key も指定できます。 これを指定すると、 入力配列内のカラム index_key の値をキーとし、 カラム column_key を値とした配列が返されます。


パラメータ

array
値を取り出したい多次元配列 (あるいはオブジェクトの配列)。 オブジェクトの配列を指定した場合は、public プロパティはそのまま取得できます。 protected や private なプロパティを取得したい場合は、そのクラスがマジックメソッド __get() および __isset() を実装している必要があります。
column_key
値を返したいカラム。 取得したいカラムの番号を整数値で指定することもできるし、 連想配列のキーやプロパティの名前を指定することもできます。 null を指定すると、配列やオブジェクト全体を返します (index_key との組み合わせで、配列の並べ替えをするときに便利です)。
index_key
返す配列のインデックス/キーとして使うカラム。 カラム番号を表す整数値、あるいはキーの名前を表す文字列になります。 この値は、いつものように配列のキーとして キャストされます。 (しかし、文字列への変換をサポートしているオブジェクトも許可されます)


返り値

入力配列の単一のカラムを表す値の配列を返します。


変更履歴

バージョン 説明
7.0.0 array にオブジェクトの配列を渡せるようになりました。


例1 レコードセットからのファーストネームの取得

<?php// データベースから返ってきたレコードセットの例$records = array(    array(        'id' => 2135,        'first_name' => 'John',        'last_name' => 'Doe',    ),    array(        'id' => 3245,        'first_name' => 'Sally',        'last_name' => 'Smith',    ),    array(        'id' => 5342,        'first_name' => 'Jane',        'last_name' => 'Jones',    ),    array(        'id' => 5623,        'first_name' => 'Peter',        'last_name' => 'Doe',    )); $first_names = array_column($records, 'first_name');print_r($first_names);?>

上の例の出力は以下となります。


Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)

例2 レコードセットから姓を取得し、"id"で並べ替える例

<?php// 先ほどの例と同じ $records 配列を使います$last_names = array_column($records, 'last_name', 'id');print_r($last_names);?>

上の例の出力は以下となります。


Array
(
    [2135] => Doe
    [3245] => Smith
    [5342] => Jones
    [5623] => Doe
)

例3 オブジェクトの public プロパティ "username" からユーザー名を取得する例

<?phpclass User{    public $username;    public function __construct(string $username)    {        $this->username = $username;    }}$users = [    new User('user 1'),    new User('user 2'),    new User('user 3'),];print_r(array_column($users, 'username'));?>

上の例の出力は以下となります。


Array
(
    [0] => user 1
    [1] => user 2
    [2] => user 3
)

例4 オブジェクトの private プロパティ "name" から、マジックメソッド __get() を使って名前を取得する例

<?phpclass Person{    private $name;    public function __construct(string $name)    {        $this->name = $name;    }    public function __get($prop)    {        return $this->$prop;    }    public function __isset($prop) : bool    {        return isset($this->$prop);    }}$people = [    new Person('Fred'),    new Person('Jane'),    new Person('John'),];print_r(array_column($people, 'name'));?>

上の例の出力は以下となります。


Array
(
    [0] => Fred
    [1] => Jane
    [2] => John
)

__isset() が用意されていなければ、空の配列が返されます。