【javascript,php】連想配列の書き方の違い
phpとjavascriptの連想配列の値の取得方法がごっちゃごちゃになるので頭の整理がてら備忘録
javascriptとphpの連想配列の違い
// javascript
<script>
const characters = [
{'name' : '田中', 'age' : 3},
{'name' : '佐藤', 'age' : 32},
{'name' : '鈴木', 'age' : 140}
];
characters.forEach((character) =>{
const name = character.name;
const age = character.age;
console.log(`${name}は${age}歳です。`);
// 田中は3歳です。
// 佐藤は32歳です。
// 鈴木は140歳です。
});
console.log(characters[0]["name"]);// 田中
</script>
// PHP
<?php
$characters = [
array('name' => '田中', 'age' => 3),
array('name' => '佐藤', 'age' => 32),
array('name' => '鈴木', 'age' => 140)
];
foreach ($characters as $character) {
$name = $character["name"];
$age = $character["age"];
echo "{$name}は{$age}歳です。<br>";
// 田中は3歳です。
// 佐藤は32歳です。
// 鈴木は140歳です。
}
echo $characters[0]["name"];// 田中
?>
微妙だけど書き方違うね
ちょっと詳細についてまとめる
連想配列の違い
どう違うのか理解するために以下に書き出してく
javascriptの連想配列は{…}
波括弧で囲む必要がある
連想配列じゃなくてオブジェクトって呼ばれこともある
キー(key)と値(value)を持つ
obj = {
"key1":"val1",
"key2":"val2"
};
キー(key)の事をプロパティとも呼び、キーはクォーテーションで囲んでも囲まなくても使える
あと、javascriptはキー(プロパティ)へのアクセス方法が2パターンある
characters[0].name;// 田中
characters[0]["name"];// 田中
phpの連想配列はインデックスの代わりにキーと値を使った配列
あくまで配列
array = [
'key1'=>'val1',
'key2'=>'val2'
];
phpの方はキーをクォーテーションで囲まないとエラーになる
ちなみにシングルクォーテーションを使ったほうがいいみたい
というのも、phpってダブルクォーテーションで囲むと変数と文字列をまとめて書くことができる変数展開というモノがある
// こんなの(変数展開)
echo "{$name}は{$age}歳です。<br>";
で、この変数展開ってダブルクォーテーションでしか使えなくて、シングルクォーテーションだと変数が展開されなく文字列でそのまま出力されちゃうんだよね
そういうことからシングルクォーテーションを普段から使ってれば、変数展開の記述かどうか見分けつけやすいって意味だと思う、たぶん
変数展開については以前調べたことがあるのでリンク貼っておく
【PHP】「変数展開」で「.(ドット)」を使わず文字列と変数を繋げる方法 | web関連 | 二色人日記。
それからphpの方には
{}
波括弧を使った構文?は基本ないみたい(変数展開は別)
{}
使ってた最後にphpの連想配列の取り出し方は
echo $characters[0]["name"];// 田中
ここの部分がjavascriptとごっちゃになってcharacters[0].name
で取得できるのかな?って思い今回の備忘録に至る
phpの方もキーの事をプロパティ呼びするのかよくわからないんだけどアクセス方法は一つだけだと思う
ちなみにphpのオブジェクトだったらプロパティが存在するから
characters[0]->name
ってプロパティにアクセスできたりするみたい