【PHP】PHP及びJavaScriptにおける配列と連想配列、オブジェクトの取り扱い【JavaScript】

自分用のメモです。
Ajax書いてて混乱したので。

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

コメントを残す

名前、メールアドレスは任意です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。