array_column
入力配列から単一のカラムの値を返す
&reftitle.description;
arrayarray_column
arrayarray
intstringnullcolumn_key
intstringnullindex_key&null;
array_column は、
配列 array の中から
column_key で指定した単一のカラムの値を返します。
オプションで index_key も指定できます。
これを指定すると、
入力配列内のカラム index_key の値をキーとし、
カラム column_key を値とした配列が返されます。
&reftitle.parameters;
array
値を取り出したい多次元配列 (あるいはオブジェクトの配列)。
オブジェクトの配列を指定した場合は、public プロパティはそのまま取得できます。
protected や private なプロパティを取得したい場合は、そのクラスがマジックメソッド
__get および __isset
を実装している必要があります。
column_key
値を返したいカラム。
取得したいカラムの番号を整数値で指定することもできるし、
連想配列のキーやプロパティの名前を指定することもできます。
&null; を指定すると、配列やオブジェクト全体を返します
(index_key との組み合わせで、配列の並べ替えをするときに便利です)。
index_key
返す配列のインデックス/キーとして使うカラム。
カラム番号を表す整数値、あるいはキーの名前を表す文字列になります。
この値は、いつものように配列のキーとして
キャストされます。
(PHP 8.0.0 より前のバージョンでは、
文字列への変換をサポートしているオブジェクトも許可されていました)
&reftitle.returnvalues;
入力配列の単一のカラムを表す値の配列を返します。
&reftitle.changelog;
&Version;
&Description;
8.0.0
index_key で指定されたカラムにオブジェクトが含まれていても、
文字列にキャストされなくなりました。
代わりに、TypeError が発生するようになっています。
&reftitle.examples;
レコードセットからのファーストネームの取得
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);
?>
]]>
&example.outputs;
John
[1] => Sally
[2] => Jane
[3] => Peter
)
]]>
レコードセットから姓を取得し、"id"で並べ替える例
]]>
&example.outputs;
Doe
[3245] => Smith
[5342] => Jones
[5623] => Doe
)
]]>
オブジェクトの public プロパティ "username" からユーザー名を取得する例
username = $username;
}
}
$users = [
new User('user 1'),
new User('user 2'),
new User('user 3'),
];
print_r(array_column($users, 'username'));
?>
]]>
&example.outputs;
user 1
[1] => user 2
[2] => user 3
)
]]>
オブジェクトの private プロパティ "name" から、マジックメソッド
__get を使って名前を取得する例
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'));
?>
]]>
&example.outputs;
Fred
[1] => Jane
[2] => John
)
]]>
__isset が用意されていなければ、空の配列が返されます。