第3章 演算子 / 第5回 模擬試験
PHPの分割代入(配列の展開代入)に関する次の記述のうち、正しいものはどれか。
`[$a, $b] = [1, 2];`のように書くと、配列の各要素を複数の変数に一度に代入できる。
正解
分割代入はPHPではサポートされていない構文である。
分割代入は連想配列に対しては使用できない。
分割代入では、必ず配列のすべての要素を変数に代入しなければならない。
解説
`[$a, $b] = [1, 2];`(または`list($a, $b) = [1, 2];`)のように書くと、右辺の配列の各要素を、対応する位置の変数へ一度に代入できます(分割代入)。
他の選択肢が誤りである理由は次の通りです。
・分割代入(リスト代入)はPHP 4以来サポートされている構文で、PHP 7.1以降は短縮記法`[$a, $b] = [...]`も使えます。
・キーを指定すれば連想配列に対しても分割代入ができます(`['name' => $name] = ['name' => 'Taro'];`のように)。
・分割代入では、右辺の配列の要素すべてを変数に受け取る必要はありません。`[, $b] = [1, 2];`のように一部の要素をカンマで空けて読み飛ばすこともできます。
例:
```
[$id, , $name] = [1, 'unused', 'Taro']; // 2番目の要素は読み飛ばす
echo $id . ' ' . $name; // 1 Taro
['name' => $name] = ['name' => 'Jiro', 'age' => 25]; // キー指定
echo $name; // Jiro
```
(参照: 独習PHP 第4版 第3章 演算子 3.2.2節 分割代入 p.98〜100)
関連する問題
- 次のコードの【 A 】に入れた場合に`true`が返される組み合わせとして正しいものはどれか。 ```php if (【 A 】) { print("true"); } else { print("false"); } 【1】"php" > "perl" 【2】0 != "0" 【3】5 - 6 + 1 【4】"false" 【5】0 + false 【6】"543a" < 56 【7】abs(-6) > 10 / 2 ```
- 次のコードの実行結果として正しいものはどれか。 ```php $a = 2 + 3 * 6; $b = $a % 7; $c = $b ** 2; print($c); ```
- PHPの論理演算子に関する次の記述のうち、正しいものはどれか。
- PHPの論理演算子に関する次の記述のうち、誤っているものはどれか。
- 次のコードの実行結果として正しいものはどれか。 ```php $a = 10; $b = 3; print $a / $b . " " . intdiv($a, $b) . " " . $a % $b; ```