[模擬問題] PHP8初級 – 配列(CTO古庄道明からの出題)

こんにちは。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]);

選択肢

選択肢1
1 => low

選択肢2
4 => low

選択肢3
16 => low

選択肢4
36 => middle

選択肢5
64 => 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

www.phpexam.jp

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次