<?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> <!-- EN-Revision: 8cdc6621f9826d04abc3e50438c010804d7e8683 Maintainer: takagi Status: ready --> <!-- Credits: mumumu --> <refentry xml:id="function.array-column" xmlns="http://docbook.org/ns/docbook"> <refnamediv> <refname>array_column</refname> <refpurpose>入力配列から単一のカラムの値を返す</refpurpose> </refnamediv> <refsect1 role="description"> &reftitle.description; <methodsynopsis> <type>array</type><methodname>array_column</methodname> <methodparam><type>array</type><parameter>array</parameter></methodparam> <methodparam><type class="union"><type>int</type><type>string</type><type>null</type></type><parameter>column_key</parameter></methodparam> <methodparam choice="opt"><type class="union"><type>int</type><type>string</type><type>null</type></type><parameter>index_key</parameter><initializer>&null;</initializer></methodparam> </methodsynopsis> <para> <function>array_column</function> は、 配列 <parameter>array</parameter> の中から <parameter>column_key</parameter> で指定した単一のカラムの値を返します。 オプションで <parameter>index_key</parameter> も指定できます。 これを指定すると、 入力配列内のカラム <parameter>index_key</parameter> の値をキーとし、 カラム <parameter>column_key</parameter> を値とした配列が返されます。 </para> </refsect1> <refsect1 role="parameters"> &reftitle.parameters; <para> <variablelist> <varlistentry> <term><parameter>array</parameter></term> <listitem> <para> 値を取り出したい多次元配列 (あるいはオブジェクトの配列)。 オブジェクトの配列を指定した場合は、public プロパティはそのまま取得できます。 protected や private なプロパティを取得したい場合は、そのクラスがマジックメソッド <function>__get</function> および <function>__isset</function> を実装している必要があります。 </para> </listitem> </varlistentry> <varlistentry> <term><parameter>column_key</parameter></term> <listitem> <para> 値を返したいカラム。 取得したいカラムの番号を整数値で指定することもできるし、 連想配列のキーやプロパティの名前を指定することもできます。 &null; を指定すると、配列やオブジェクト全体を返します (<parameter>index_key</parameter> との組み合わせで、配列の並べ替えをするときに便利です)。 </para> </listitem> </varlistentry> <varlistentry> <term><parameter>index_key</parameter></term> <listitem> <para> 返す配列のインデックス/キーとして使うカラム。 カラム番号を表す整数値、あるいはキーの名前を表す文字列になります。 この値は、いつものように配列のキーとして <link linkend="language.types.array.key-casts">キャスト</link>されます。 (PHP 8.0.0 より前のバージョンでは、 文字列への変換をサポートしているオブジェクトも許可されていました) </para> </listitem> </varlistentry> </variablelist> </para> </refsect1> <refsect1 role="returnvalues"> &reftitle.returnvalues; <para> 入力配列の単一のカラムを表す値の配列を返します。 </para> </refsect1> <refsect1 role="changelog"> &reftitle.changelog; <para> <informaltable> <tgroup cols="2"> <thead> <row> <entry>&Version;</entry> <entry>&Description;</entry> </row> </thead> <tbody> <row> <entry>8.0.0</entry> <entry> <parameter>index_key</parameter> で指定されたカラムにオブジェクトが含まれていても、 文字列にキャストされなくなりました。 代わりに、<classname>TypeError</classname> が発生するようになっています。 </entry> </row> </tbody> </tgroup> </informaltable> </para> </refsect1> <refsect1 role="examples"> &reftitle.examples; <para> <example> <title>レコードセットからのファーストネームの取得</title> <programlisting role="php"> <![CDATA[ <?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); ?> ]]> </programlisting> &example.outputs; <screen role="php"> <![CDATA[ Array ( [0] => John [1] => Sally [2] => Jane [3] => Peter ) ]]> </screen> </example> </para> <para> <example> <title> レコードセットから姓を取得し、"id"で並べ替える例 </title> <programlisting role="php"> <![CDATA[ <?php // 先ほどの例と同じ $records 配列を使います $last_names = array_column($records, 'last_name', 'id'); print_r($last_names); ?> ]]> </programlisting> &example.outputs; <screen role="php"> <![CDATA[ Array ( [2135] => Doe [3245] => Smith [5342] => Jones [5623] => Doe ) ]]> </screen> </example> </para> <para> <example> <title> オブジェクトの public プロパティ "username" からユーザー名を取得する例 </title> <programlisting role="php"> <![CDATA[ <?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')); ?> ]]> </programlisting> &example.outputs; <screen role="php"> <![CDATA[ Array ( [0] => user 1 [1] => user 2 [2] => user 3 ) ]]> </screen> </example> </para> <para> <example> <title> オブジェクトの private プロパティ "name" から、マジックメソッド <function>__get</function> を使って名前を取得する例 </title> <programlisting role="php"> <![CDATA[ <?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')); ?> ]]> </programlisting> &example.outputs; <screen role="php"> <![CDATA[ Array ( [0] => Fred [1] => Jane [2] => John ) ]]> </screen> </example> <function>__isset</function> が用意されていなければ、空の配列が返されます。 </para> </refsect1> </refentry> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"~/.phpdoc/manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->