関数・クラス解説
list
version:PHP 4, PHP 5, PHP 7 (公式)配列と同様の形式で、複数の変数への代入を行う
公式リファレンス
書式
list ( mixed $var [, mixed ...$vars ] ) : array
説明
array() と同様に、 この関数は実際には関数ではなく言語構造です。 list() は、 単一の操作で一連の変数に値を代入するために使われます。
警告注意:
PHP 7.1.0 より前のバージョンでは、list() は数値添字の配列でのみ動作し、 また、添字は 0 から始まることを想定していました。
PHP 5 では、list()は、最も右のパラメータから値を代入します。 PHP 7 では、list()は、最も左のパラメータから値を代入します。
プレーンな変数を使用している場合には、このことを気にする必要はありません。 しかし、添字配列を使用している場合には、配列の添字の順番が list() に書いたものと同じく左から右となることを通常は期待しますが、 PHP 5 ではそうはなりません。この配列の添字は逆の順番となります。
一般論として、特定の操作順に依存することは避けたほうがいいでしょう。 将来的に、その順番が変更される可能性があるからです。
パラメータ
- var
- 変数。
- vars
- 残りの変数。
返値
代入した配列を返します。
注意
警告 PHP 5 では、list()は、最も右のパラメータから値を代入します。 PHP 7 では、list()は、最も左のパラメータから値を代入します。 プレーンな変数を使用している場合には、このことを気にする必要はありません。 しかし、添字配列を使用している場合には、配列の添字の順番が list() に書いたものと同じく左から右となることを通常は期待しますが、 PHP 5 ではそうはなりません。この配列の添字は逆の順番となります。 一般論として、特定の操作順に依存することは避けたほうがいいでしょう。 将来的に、その順番が変更される可能性があるからです。
更新履歴
バージョン | 説明 |
---|---|
7.3.0 | 配列へ分割して代入する操作が、リファレンスへの代入をサポートしました。 |
7.1.0 | キーを list() 関数で指定できるようになりました。 これによって、キーが数値でなかったり、連続していなかったりした場合に配列の構造を変えることができるようになります。 |
7.0.0 | 代入操作が行われる順番が変わりました |
7.0.0 | list() の式をまったくの空にすることはできなくなりました |
7.0.0 | 文字列は扱えなくなりました |
サンプル
例1 list() の例
$info = array('コーヒー', '茶色', 'カフェイン');
// すべての変数の取得
list($drink, $color, $power) = $info;
echo "$drink の色は $color で、$power が含まれています。\n";
// 一部の変数の取得
list($drink, , $power) = $info;
echo "$drink には $power が含まれています。\n";
// 三番目のみの取得
list( , , $power) = $info;
echo "$power 欲しい!\n";
// list() は文字列では動作しません
list($bar) = "abcde";
var_dump($bar); // NULL
例2 list() の使用法の例
<table> <tr> <th>社員氏名</th> <th>給与</th> </tr>
$result = $pdo->query("SELECT id, name, salary FROM employees");
while (list($id, $name, $salary) = $result->fetch(PDO::FETCH_NUM)) {
echo " \n" .
" $name \n" .
" $salary \n" .
" \n";
}
</table> 例3 ネストした list() の使用法
list($a, list($b, $c)) = array(1, array(2, 3));
var_dump($a, $b, $c);
int(1)
int(2)
int(3)
例4 配列の添字を使用した list() の例
$info = array('coffee', 'brown', 'caffeine');
list($a[0], $a[1], $a[2]) = $info;
var_dump($a);
次のような出力になります(list() の文法に書かれた 順番と、要素の順番の違いに注意):
上の例の PHP 7 での出力は、このようになります。
array(3) {
[0]=>
string(6) "coffee"
[1]=>
string(5) "brown"
[2]=>
string(8) "caffeine"
}
上の例の PHP 5 での出力は、このようになります。
array(3) {
[2]=>
string(8) "caffeine"
[1]=>
string(5) "brown"
[0]=>
string(6) "coffee"
}
例5 list() と添字の定義順
list() が配列の要素をどの順に処理するかは、配列の添字とは無関係です。
<?php$foo = array(2 => 'a', 'foo' => 'b', 0 => 'c');$foo[1] = 'd';list($x, $y, $z) = $foo;var_dump($foo, $x, $y, $z); 結果は次のようになります (list() 内で要素をどの順で利用しているかに注目しましょう)。
array(4) {
[2]=>
string(1) "a"
["foo"]=>
string(1) "b"
[0]=>
string(1) "c"
[1]=>
string(1) "d"
}
string(1) "c"
string(1) "d"
string(1) "a"
例6 list() をキーを指定して使う
PHP 7.1.0 以降では、list() に明示的に キーを含めることができるようになりました。 任意の式も指定可能です。 数値や文字のキーも許されますが、 キーがない要素とある要素を混ぜることは許されません
<?php$data = [ ["id" => 1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'],];foreach ($data as ["id" => $id, "name" => $name]) { echo "id: $id, name: $name\n";}echo PHP_EOL;list(1 => $second, 3 => $fourth) = [1, 2, 3, 4];echo "$second, $fourth\n"; 上の例の出力は以下となります。
id: 1, name: Tom
id: 2, name: Fred
2, 4
参考
ワード検索
※入力キーワードが、関数名・説明文・タグに含まれるものを検索関数名アルファベット別
最終更新一覧
●stristr
大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却
●stripslashes
バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く
●stripos
大文字小文字を区別せずに文字列が最初に現れる位置を取得する
●stripcslashes
addcslashes() でクォートされた文字列をアンクォートする
●strip_tags
文字列から HTML と PHP のタグを除去して返却
●strcspn
指定した文字が最初に現れる位置を調べる
●strcoll
ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する
●strcmp
2つの文字列を比較し同じか(あるいは大小)を判定する
●strchr
strstr() のエイリアス
●strcasecmp
2つの文字列を比較(大文字小文字を区別せず同じとみなす)
カテゴリー一覧
PHP の振る舞いの変更
音声フォーマットの操作
認証サービス
コマンドライン関連
圧縮およびアーカイブ
暗号
データベース関連
日付および時刻関連
ファイルシステム
自然言語および文字エンコーディング
画像処理および作成
メール関連
数学
テキスト以外の MIME 型
プロセス制御
その他の基本モジュール
その他のサービス
検索エンジン用の拡張モジュール
サーバー固有のモジュール
セッション関連
テキスト処理
変数・データ型関連
ウェブサービス
Windows 用のモジュール
XML 操作
GUI用の拡張モジュール