[模擬問題] PHP8初級 – 制御構文(CTO古庄道明からの出題)

こんにちは。PHP技術者認定機構 CTOの古庄道明です。
今日もPHP8初級試験の模擬問題と解説を紹介します。
以下を解いて出題のイメージと知識を補っていただけると幸いです。

目次

問題

次のコードの実行結果として正しいものはどれか。

$num[0] = 'zero';
$num[1] = 'one';
$num[3] = 'three';
$num[2] = 'two';

print ('【loop_A】');
for ($i = 0, $count_num = count($num); $i < $count_num; $i++) {
    print ($num[$i] . ',');
}

print ('【loop_B】');
foreach ($num as $i => $n) {
    print ($i . ',');
}

選択肢

選択肢1
【loop_A】0,1,3,2,【loop_B】zero,one,two,three,

選択肢2
【loop_A】0,1,2,3,【loop_B】0,1,3,2,

選択肢3
【loop_A】zero,one,two,three,【loop_B】zero,one,three,two,

選択肢4
【loop_A】zero,one,two,three,【loop_B】0,1,3,2,

選択肢5
【loop_A】zero,three,one,two,【loop_B】0,1,2,3,

回答と解説

問題は「制御構文について」です。ただし、制御構文だけでなく、配列に関する知識も少し必要です。

構造を3つに分けて、それぞれ見ていきましょう。
まずはこの部分です。

$num[0] = 'zero';
$num[1] = 'one';
$num[3] = 'three';
$num[2] = 'two';

基本的には「配列を作っている」のですが、ポイントは順番です。
PHPでは「要素が追加された順番」が保持されます。

$num[0] = 'zero';
$num[1] = 'one';
$num[3] = 'three';
$num[2] = 'two';
print_r($num);

のコードを動かしてみると

Array
(
    [0] => zero
    [1] => one
    [3] => three
    [2] => two
)

のようになります。
この部分を覚えておきましょう。

次はコードのこの部分です。

print ('【loop_A】');
for ($i = 0, $count_num = count($num); $i < $count_num; $i++) {
    print ($num[$i] . ',');
}

こちらは、for文を使っています。
式1 のループ開始時処理では、

$i = 0
$count_num = count($num)

の二つの式が書かれています。
これによって「$iが0で初期化され」「$count_numには、$numの要素の個数である4が代入される」状態になります。
続いて、式2 の繰り返しの判定が $i < $count_num のため、$iが4未満なら繰り返しが続きます。
また、式3 が $i++ なので、繰り返しの後に $i がインクリメント(+1)されます。

そのため全体としては「0から順番に3まで」$iの値が変化します。
その中で

    print ($num[$i] . ',');

とやっています。
この for 文は、配列に追加された順番で処理しているのではありません。
$i の値を 0, 1, 2, 3 と変化させながら、$num[$i] を参照しています。
そのため、全体としては

$num[0]
$num[1]
$num[2]
$num[3]

の順番で参照します。
結果として、はじめは zero、次は one、次は two、最後は three が出力されます。

最後にコードのこの部分です。

print ('【loop_B】');
foreach ($num as $i => $n) {
    print ($i . ',');
}

foreachは、配列を反復処理します。
配列に追加された順番に処理されるため、$i => $n には

0 => zero
1 => one
3 => three
2 => two

が、この順番で処理されていきます。
また、コードでは

    print ($i . ',');

となっているので、結果として
0,1,3,2,
と出力されることがわかります。

そのため、全体としては(わかりやすく改行を入れていますが)

【loop_A】
zero,one,two,three,
【loop_B】
0,1,3,2,

がそれぞれ出力されることがわかります。

上述と等しいのは、選択肢4の
【loop_A】zero,one,two,three,【loop_B】0,1,3,2,
であるため、正解は選択肢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をコピーしました!
目次