【 PHP 】PHP8に入門してみた 53日目 PHPの基本 ( 配列の補足 ブレイクスルー )

PHP8技術者認定初級試験 が始まるようなので 試験に向けて (できるだけ)勉強しようと思います! 使用する書籍は独習PHP 第4版(山田 祥寛)|翔泳社の本 (shoeisha.co.jp) となります。

配列

ブレイクスルー!

実は配列連想配列は仲間というわけではなく、同一人物(人ではありませが)という衝撃の事実が分かりました。
PHPでは$data = ['test', '01', '02']というは$data = [0 => 'test', 1 => '01', 2 => '02']という連想配列と同等なのだそうです。

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PHPの基本</title>
</head>

<body>
    <?php
    // print命令は指定された文字列を表示するための命令です。
    $msg = 'こんにちは、変数の世界! <br />';

    print $msg;
    print 'こんにちは、皆さん! ';

    print '<br />';

    $data01 = ['test', '01', '02'];
    $data02 = [0 => 'test', 1 => '01', 2 => '02'];

    print_r($data01);
    print '<br />';
    print '<br />';
    print_r($data01);
    ?>
</body>

</html>

確かに同じです。

配列はキー0から自動で割り当てられた連想配列なんですね。
勉強になりました🤓

すべての配列連想配列として実装されている

一部だけ連想配列にすることもできるようです。
正確には「一部だけ明示的に連想配列形式(キーバリュー)として定義できる」ということかと思います。

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PHPの基本</title>
</head>

<body>
    <?php
    // print命令は指定された文字列を表示するための命令です。
    $msg = 'こんにちは、変数の世界! <br />';

    print $msg;
    print 'こんにちは、皆さん! ';

    print '<br />';

    $data01 = [0 => '一部分だけ', '連想配列に', 2 => 'することもできます。', 5 => 'この場合はどのようなキーが', '割り当てられるのでしょう?'];
    print_r($data01);
    print '<br />';
    ?>
</body>

</html>

意図的にキーを指定しなった要素について、ひとつ前の要素のキーに+1した値がキーとして自動的に割り当てられたことが分かります。

キーの値をマイナスにしてみると・・・

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PHPの基本</title>
</head>

<body>
    <?php
    // print命令は指定された文字列を表示するための命令です。
    $msg = 'こんにちは、変数の世界! <br />';

    print $msg;
    print 'こんにちは、皆さん! ';

    print '<br />';

    $data01 = [-10 => 'キーをマイナスにしたら', 'どうなるのでしょう?', -1 => 'PHPのバージョンによって', 5 => 'キーの値が異なるらしい!'];
    print_r($data01);
    print '<br />';
    ?>
</body>

</html>

PHP8では前例と同様に+1された値が割り当てられます。

バージョン8よりもまえ(PHP7.4以前)はひとつ前の要素のキーの値がマイナス値の場合、自身のキーの値は0になるようです。
挙動が違うので注意が必要です。

メモ

この発想はありませんでした!

混在しても問題ありません!
自由すぎるPHPに万歳。

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PHPの基本</title>
</head>

<body>
    <?php
    // print命令は指定された文字列を表示するための命令です。
    $msg = 'こんにちは、変数の世界! <br />';

    print $msg;
    print 'こんにちは、皆さん! ';

    print '<br />';

    $data01 = [-10 => 'キーをマイナスにしたら', 'どうなるのでしょう?', 'なんということでしょう・・・' => 'PHPのバージョンによって', 'キーの値が異なるらしい!'];
    print_r($data01);
    print '<br />';
    ?>
</body>

</html>

 

PHPPHP

Posted by raika@blog