【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のほうが使い分けなくてよいので簡単かな。
