質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • PHP

    23557questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • 配列

    600questions

    配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

PHP 多次元配列について

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 589

Zac1988

score 22

標記の件、質問させていただきます。

例えばですが、
$data[0][0]  = 'yamada';
$data[0][0][sex]  = 'male';
という記述があった場合、
echo $data[0][0].'<br/>';
echo $data[0][0][sex]
上の結果は、
yamada
male
と表示されます。これをあえて日本語的に理解しようとすると
[0][0]はyamada
[0][0][sex]はmale
という風に理解しています。

では次の場合は、どう理解すればよいでしょうか。
$data[0][]  = 'yamada';
二つ目の配列が空の場合について、ご教授下さい。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+4

追記:肝心の質問に答えていませんでした。
配列には番号をキーとする通常の配列と、文字列をキーとする「連想配列」があります。

$data[0][0]  = 'yamada';


を書きなおすと、

$data = array(array('yamada');


となります。

同様に、連想配列とした

$data[0][0]['sex']  = 'male';


これも、以下のように書き直せます。

$data = array(array('sex' => 'male');

で、質問の

$data[0][] = 'yamada';


についてですが、[]の指定は配列の一番最後に追加するという意味になりますので、例えば以下の記述は

$data[0][] = 'yamada';
$data[0][] = 'tanaka';


以下のように書き直せます。

$data = array(array('yamada', 'tanaka'));


こんなで理解出来ますでしょうか。

上の結果は、 
yamada 
male 
と表示されます

これホントですか?
ちなみに手元のPHP7.1.0の環境で下記コードを実行してみましたが

$data[0][0]  = 'yamada';
$data[0][0]['sex']  = 'male';
echo $data[0][0].PHP_EOL;
echo $data[0][0]['sex'].PHP_EOL;
echo var_export($data, true).PHP_EOL;
$data[0][]  = 'tanaka';
echo var_export($data, true).PHP_EOL;


結果は以下の通りでした。

PHP Warning:  Illegal string offset 'sex' in /home/kunai/te.php on line 3
mamada
PHP Warning:  Illegal string offset 'sex' in /home/kunai/te.php on line 5
m
array (
  0 =>
  array (
    0 => 'mamada',
  ),
)
array (
  0 =>
  array (
    0 => 'mamada',
    1 => 'tanaka',
  ),
)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/22 18:02

    キャンセル

  • 2017/02/22 18:03

    http://www.tryphp.net/phpref-array/#5
    こちら参考にしたんですけど、違いましたかね?

    キャンセル

  • 2017/02/22 18:07

    理解した。sex = 0となり
    $data[0][0] = 'yamada';
    $data[0][0][sex] = 'male';
    文字列のインデックスと解釈されyamadaの先頭文字がmaleの先頭文字に置き換わるのね。

    キャンセル

  • 2017/02/22 18:13 編集

    PHP 5.3.3でも同じですね。
    かぶった:-|

    面白い動きですね。
    > $data[0][0]['sex'] = 'male';

    $data[0][0][0] と見なされて'y'の部分になり、'male'を代入してる
    だけど'y'1文字なので'male'の先頭1文字'm'が'y'の位置に代入される。
    結果として$data[0][0] = "yamada"だったのが$data[0][0]="mamada"になる。

    位置指定で1文字置き換えるだけならこれで出来るのか。
    $ cat test.php
    <?php
    $var="0123456789";
    echo $var . PHP_EOL;
    $var[5]='A';
    echo $var . PHP_EOL;
    $ php -n ./test.php
    0123456789
    01234A6789

    キャンセル

  • 2017/02/22 19:14

    kunai様
    >[]の指定は配列の一番最後に追加するという意味になりますので、・・・
    >$data = array(array('yamada', 'tanaka'));
    配列の一番最後に追加するというのが、まだ理解できてないです。。。

    キャンセル

  • 2017/02/23 10:25

    Zac1988さん
    配列と言うのは、電車のようなものです。
    普通は1号車、2号車と言うように数字でどの車両かを判断します。
    配列の一番最後に追加するという事は、今何号車まであるのかわからないけど、とにかく一番最後の車両にデータを入れるという事です。
    何号車かについては、配列に入った時に($data[] = 'kunai'; ←この時に)PHPが自動で番号を割り振ります。
    こんな回答でどうでしょう。

    キャンセル

+4

PHPの場合文字列に対しても[n]でn文字目にアクセスできます。

$data='yamada';
print $data[0]."<br>";//「y」
$data[0]='x';
print $data."<br>";//「xamada」


$data[0]に複数文字列を指定した場合1文字目が代入されるみたいですね

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

(もし$data[0]が初期化されていなければ空の配列として初期化された後)
$data[0]に配列の要素を追加という意味かと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • PHP

    23557questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • 配列

    600questions

    配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。