Help us understand the problem. What is going on with this article?

【PHP】配列

More than 3 years have passed since last update.

この記事はPHP総復習カレンダー3日目の記事です!

関数って言ってたけど先に配列を書いちゃったよ(´・ω・`)
引数とか出てきちゃうけど追記するので察してください・・・。

配列とは

配列は「複数の値をしまっておく箱」のようなものです。
配列として宣言すると、中身が空っぽでも配列になります。

配列の宣言と同時に値を入れることができます。

<?php

$days = []; // $daysは配列

$family = ['dad', 'mom', 'son', 'daughter']; // $familyは配列

※PHPでの配列の書き方は5.4以降変更されました。

配列の添字

配列に列挙された中身には、添字という要素の場所を表すものがあります。
添字は0から順番に0,1,2..となります。添字をつけると配列の要素にアクセスすることができます。

<?php

// 添字は0, 1, 2, 3
$family = ['dad', 'mom', 'son', 'daughter'];

echo $family[0]; // 'dad'

echo $family[3]; // 'daughter'

連想配列

添字の代わりに、要素に名前(キー)をつけてアクセスすることができます。

<?php

$family_name = [
    'dad' => 'Bob',
    'mom' => 'Jessy',
    'son' => 'James',
    'daughter' => 'Emily'
];

echo $family_name['dad']; // 'Bob'

要素の追加

末尾に要素を追加

配列の末尾に新しい要素を追加するには以下のように記述します。

<?php

// 添字配列の場合
$family = ['dad', 'mom', 'son', 'daughter'];

$family[] = 'puppy'; // 配列の末尾に要素を追加

echo $family[4]; // 'puppy'


// 連想配列の場合
$family_name = [
    'dad' => 'Bob',
    'mom' => 'Jessy',
    'son' => 'James',
    'daughter' => 'Emily'
];

$family_name['puppy'] = 'John';

echo $family_name['puppy']; // 'John'

先頭に要素を追加

先頭に追加する場合はarray_unshift()を使います。

<?php

$family = ['dad', 'mom', 'son', 'daughter'];

array_unshift($family, 'grandma');

// $familyは['grandma', 'dad', 'mom', 'son', 'daughter']になる

任意の場所に要素を追加

配列の途中に要素を差し込むなら以下。
array_splice()はもともと要素を置換する関数なのですが、第3引数に0を指定すると要素を消去せず差し込めます。

<?php

$family = ['dad', 'mom', 'son'];

// $family[2]の前に'uncle'を追加
array_splice($family, 2, 0, 'uncle');

// ['dad', 'mom', 'uncle', 'son']

複数の要素を追加

array_push()を使って一度に複数要素を追加することもできます。

<?php

$family = ['dad', 'mom', 'son'];
array_push($family, 'puppy', 'citty');

// ['dad', 'mom', 'son', 'puppy', 'citty']

array_merge()を使うと配列と配列を結合。

<?php

$family = ['dad', 'mom', 'son'];
$add_member = ['grandma', 'grandpa'];

$new_family = array_merge($add_member, $family);

// $new_familyは['grandma', 'grandpa', 'dad', 'mom', 'son']

※array_mergeの場合、元の配列($family)には影響しない

多次元配列

配列の要素には配列を持たせることができます。

<?php

$families = [
    [
        'dad', 'mom', 'son'
    ],
    [
        'dad', 'mom', 'daughter'
    ]
];

echo $families[0][0]; // 'dad'

echo $families[1][2]; // 'daughter'

// $families['Smith']と$families['Williams']はそれぞれ配列

もちろん連想配列を多次元配列にすることもできます。

<?php

$families = [
    'Smith' => [
        'dad' => 'Bob',
        'mom' => 'Jessy',
        'son' => 'James'
    ],
    'Williams' => [
        'dad' => 'Michael',
        'mom' => 'Jessy',
        'daughter' => 'Emily'
    ]
];

echo $families['Smith']['dad']; // 'Bob'

ここでの $families['Smith']['mom']の'Jessy'と$families['Williams']['mom']の'Jessy'は、同じ文字列ですが別物です。
スミス家のジェシーさんとウィリアム家のジェシーさんですね。

この辺、プログラミング始めたばっかの時「ハァ?(^p^)」ってなったんだよなあ。。

PHPの配列での注意

PHPの場合は添字配列と連想配列が同じ「配列型」の扱いです。添字配列と連想配列を混ぜたり、ループ処理などでもほぼ同じように扱えるのですが、他の言語だと扱いそのものが違うので注意です!

まとめ

配列は奥が深くて、他にも配列に係る関数等々たくさんあるのですが、初心者向けということでまたの機会に!

下記の記事たちが参考になるので是非見てみてください。(勝手にリンクすいません)

【PHP】連想配列、配列への追加

[PHP] 配列・連想配列の初期化、結合、追加

tokutoku393
エンジニア兼テクニカルライター。大学は法学部。Node女学園主催。たまに電気風呂と呼ばれます。PHP/Laravel/Node.js/Milkcocoa/IoT/電子工作
http://toku-log.hatenablog.com/
dotstudio
全ての人がモノづくりを楽しむ世界を目指して活動しています。
https://dotstud.io
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした