こんにちは。PHP技術者認定機構 CTOの古庄道明です。
今日もPHP8初級試験の模擬問題と解説を紹介します。
以下を解いて出題のイメージと知識を補っていただけると幸いです。
問題
次のコードの実行結果として正しいものはどれか。
$numbers = array(array(1, 2, 3), array(4, 5, 6), array(7, 8, 9));
function judge($arg) {
$arg = $arg ** 2;
if ($arg < 20){
return array($arg, "low");
} elseif ($arg < 45) {
return array($arg, "middle");
} else {
return array($arg, "high");
}
}
$result = judge($numbers[1][2]);
print($result[0]." => ". $result[1]);
選択肢
選択肢11 => low
選択肢24 => low
選択肢316 => low
選択肢436 => middle
選択肢564 => high
回答と解説
問題は「配列について」です。
https://www.php.net/manual/ja/language.types.array.php
に一通り記載があるので、確認をしておくとよいでしょう。
今回の設問はコードを実行順に読んでいくとよいので、ゆっくりコードを解読していきましょう。
まず一行目はこのようになっています。
$numbers = array(array(1, 2, 3), array(4, 5, 6), array(7, 8, 9));
表記を短縮構文にして改行を入れると、このようになります。
$numbers = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
];
この配列は「数値添字配列でキーを省略する」書き方で、かつキーをすべて省略しているため、キーは0から始まり、1, 2と続きます。
そのため、キーを明示すると、以下のようになります。
$numbers = [
0 => [1, 2, 3],
1 => [4, 5, 6],
2 => [7, 8, 9],
];
また、中の配列も同様に「数値添字配列でキーを省略する」書き方になっています。
そのため、これをまず「1要素ごとに改行する」と、以下のようになります。
$numbers = [
0 => [
1,
2,
3,
],
1 => [
4,
5,
6,
],
2 => [
7,
8,
9,
],
];
そして、これにキーを明示すると、以下のようになります。
$numbers = [
0 => [
0 => 1,
1 => 2,
2 => 3,
],
1 => [
0 => 4,
1 => 5,
2 => 6,
],
2 => [
0 => 7,
1 => 8,
2 => 9,
],
];
コードの次は関数宣言なので、一度飛ばして次にいきましょう。
その次は、関数を呼ぶところになります。
$result = judge($numbers[1][2]);
関数 judge() を呼んでいます。
ポイントは、引数で渡されている配列の値になります。
上述の最後の分解を見ながらゆっくりひもといていきましょう。
まず $numbers[1] のため、この時点で対象になるのは、以下のデータです。
1 => [
0 => 4,
1 => 5,
2 => 6,
],
次に、$numbers[1][2] とあるので、[2] にあたるのは以下です。
2 => 6,
従って、関数 judge() に渡される値は「6」となります。
次に、関数 judge() を確認していきましょう。
まずはじめに、引数の値を計算しています。
$arg = $arg ** 2;
** は「累乗演算子」なので、 $arg ** 2 は「$arg の2乗」になるので、今回は 6 * 6で、36が $arg に代入されます。
次はif文になります。$argは36のため、以下のif文にヒットします。
} elseif ($arg < 45) {
return array($arg, "middle");
}
そのため、戻り値は [36, "middle"] という値になります。
関数を呼び出した後は、以下のコードが書かれています。
print($result[0]." => ". $result[1]);
上述の通り、$result[0] には 36が、$result[1] には "middle" が入っているので、出力は以下の通りになります。
36 => middle
選択肢でこのようになっているのは選択肢4であるため、正解は選択肢4となります。
PHP8初級試験と公式問題集に興味がある方は、以下のページをご覧のうえ、この機会に是非受験ください。
PHP8初級試験
https://www.phpexam.jp/summary/novice8
公式問題集:PHP8技術者認定初級試験公式問題集A
Kindle版 https://amzn.asia/d/1bS88y9
ペーパーバック版 https://amzn.asia/d/3P3Izeu
また、試験対策セミナーは毎月開催しています。興味がある方は以下のページをご覧いただき是非セミナーにもご参加ください。(フォローいただけるとセミナーのご案内が届くようになります)
PHP技術者認定機構の公式Peatixグループ
https://peatix.com/group/43424

