【PHP】PHP及びJavaScriptにおける配列と連想配列、オブジェクトの取り扱い【JavaScript】
自分用のメモです。
Ajax書いてて混乱したので。
Contents
PHPの場合
配列の宣言
$test = array(); $test = [];
配列の代入
配列の場合
$test = array('aa','bb','cc'); $test[] = 'aa';
連想配列の場合
$test = array( 'a' => 'aa', 'b' => 'bb' ); $test = [ 'a' => 'aa', 'b' => 'bb' ];
追加
$test = array('a','b'); cを追加。 array_push($test,'c'); $test[] = 'c';
配列の結合
$test1 = ['a','b']; $test2 = ['c','b']; $test3 = array_merge($test1,$test2); array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [3]=> string(1) "b" } $test1 = [ 'a' => 'aa', 'b' => 'bb' ]; $test2 = [ 'a' => 'cc', 'd' => 'dd' ]; $test3 = array_merge($test1,$test2); array(3) { ["a"]=> string(2) "cc" ["b"]=> string(2) "bb" ["d"]=> string(2) "dd" }
array_mergeはキーが文字列の場合、同じキーがあれば上書きされる。
キーが数値の場合、添字番号が振り直され、上書きはされない。
$test1 = [ 'a' => 'aa', 'b' => 'bb' ]; $test2 = [ 'a' => 'cc', 'd' => 'dd' ]; $test3 = array_merge_recursive($test1,$test2); array(3) { ["a"]=> array(2) { [0]=> string(2) "aa" [1]=> string(2) "cc" } ["b"]=> string(2) "bb" ["d"]=> string(2) "dd" }
array_merge_recursiveは同じキーがあった場合、配列としてどちらも保持する。
連想配列にキーを追加する
$test = [ 'a' => 'aa', 'b' => 'bb' ]; $test['c'] = 'cc'; array(3) { ["a"]=> string(2) "aa" ["b"]=> string(2) "bb" ["c"]=> string(2) "cc" }
要素の取り出し
キーなし $test[0]; キーあり $test['a'];
オブジェクトのプロパティのデータ取り出し
アローでつなぐ。 $test->id; 連想配列のようにしてもアクセスできる。 $test['id'];
foreach
foreach($tests as $test){ }
JavaScriptの場合
連想配列とオブジェクトは同じもの。
というか、連想配列はない。
配列の宣言
var test = new Array(); var test = []; 配列の初期値を入れての宣言。 var test = Array('a','b'); var test = ['a',123];
上段のArray()は
Array(4)
とした場合は
[ <4 empty item> ]
となってしまう。
追加
var test = ['a','b']; test.push('c');
削除
delete test[1]; [ 'a', <1 empty item>, 'c' ]
結合
var test1 = ['a','b']; var test2 = ['c','d']; var test = test1.concat(test2); [ 'a', 'b', 'c', 'd' ]
取り出し
test[0];
foreach
test = ['a','b','c','d']; test.forEach(function(value){ console.log(value); }); a b c d
jQueryの場合
var test = ['a','b','c','d']; $.each(test,function(index,value){ console.log(value); })
indexは添字番号、valueが値
オブジェクトの宣言、初期化
var test = {};
オブジェクトの値の代入
var test = { 'id' : 1, 'name' : 'taro', 'age' : 21, 'sex' : ['male','female'] }
オブジェクトの値の取り出し
test.id 1 test.name taro test.sex malefemale
test['id'] test['name'] test['sex']
このようにしても取り出せる。
オブジェクトの値の追加
test['a'] = 'aaa' test.b = 'bbb'
オブジェクトの結合
var test1 = {'a':'aa','b':'bb'} var test2 = {'c':'cc','d':'dd'} test = Object.assign(test1,test2)
このとき、test1にtest2を結合しており、test1自体が結合後のものとなってしまう。
test1の中身は{‘a’:’aa’,’b’:’bb’}ではなく{‘a’:’aa’,’b’:’bb’,’c’:’cc’,’d’:’dd’}となってしまうことに注意。
オブジェクトのforeach
オブジェクトのままではforeachできない。
Object.keys()を利用して、オブジェクトのキーだけを取り出した配列を作成し、それをループさせる。
Object.keys(test).forEach(function(key){ console.log(key,test[key]) })
キーは
key
値は
test[key]
で取得できる。
jQueryの場合は上記のように変換しなくてもよい
$.each(test,function(index,value){ $console.log(index) $console.log(value) })
jQueryのほうが使い分けなくてよいので簡単かな。