(PHP 5 >= 5.5.0, PHP 7, PHP 8)
array_column — 入力配列から単一のカラムの値を返す
$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
返す配列のインデックス/キーとして使うカラム。 カラム番号を表す整数値、あるいはキーの名前を表す文字列になります。 この値は、いつものように配列のキーとして キャストされます。 (PHP 8.0.0 より前のバージョンでは、 文字列への変換をサポートしているオブジェクトも許可されていました)
入力配列の単一のカラムを表す値の配列を返します。
バージョン | 説明 |
---|---|
8.0.0 |
index_key で指定されたカラムにオブジェクトが含まれていても、
文字列にキャストされなくなりました。
代わりに、TypeError が発生するようになっています。
|
例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" からユーザー名を取得する例
<?php
class 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() を使って名前を取得する例
<?php
class 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 )