PHPの配列
PHPのデバッグ時の中身確認は、print_r(aaa);でOK。また、PHPでの命令は全て関数として機能しているため、オブジェクトがメソッドとかプロパティを持つわけではない。
<?php
$aaa=array("りんご","みかん","なし");
print_r($aaa); //Array ( [0] => りんご [1] => みかん [2] => なし )
$bbb=["りんご","みかん","なし"];
print_r($bbb); //Array ( [0] => りんご [1] => みかん [2] => なし )
$ccc=["apple"=>"りんご","orrange"=>"みかん","pear"=>"なし"];
print_r($ccc); //Array ( [apple] => りんご [orrange] => みかん [pear] => なし )
$ddd=count($aaa); //引数の数を調べる
print_r($ddd); //3
$eee=array_count_values($aaa); //出現回数を調べる
print_r($eee); //Array ( [りんご] => 1 [みかん] => 1 [なし] => 1 )
$fff=array_merge($aaa,$aaa); //配列を結合する
print_r($fff); //Array ( [0] => りんご [1] => みかん [2] => なし [3] => りんご [4] => みかん [5] => なし )
sort($aaa); //配列をソートする。ソート順によりrsort()、ksort()、asort()など有り。
print_r($aaa); //Array ( [0] => なし [1] => みかん [2] => りんご )
$ggg=array_reverse($aaa); //配列を逆順にする
print_r($ggg); //Array ( [0] => りんご [1] => みかん [2] => なし )
$hhh=array_shift($ggg); //配列の最初のデータを削除
print_r($ggg);//Array ( [0] => みかん [1] => なし )
print_r($hhh);//削除した値、りんご
$hhh=array_pop($ggg); //配列の最後のデータを削除
print_r($ggg);//Array ( [0] => みかん )
print_r($hhh);//削除した値、なし
$ggg=["りんご","みかん","なし","ぶどう","いちご"];
$iii=array_splice($ggg,2,2); //配列の3番目から2個のデータを削除
print_r($ggg);//Array ( [0] => りんご [1] => みかん [2] => いちご )
$ggg=["りんご","みかん","なし","ぶどう","いちご"];
$iii=array_splice($ggg,-2,1); //配列の最後から2番目のデータを1つ削除
print_r($ggg);//Array ( [0] => りんご [1] => みかん [2] => なし [3] => いちご )
$jjj=array_unshift($ggg,"かき"); //配列の先頭にデータを追加
print_r($ggg);//Array ( [0] => かき [1] => りんご [2] => みかん [3] => なし [4] => いちご )
print_r($jjj);//要素の個数:5
$jjj=array_push($ggg,"バナナ"); //配列の最後にデータを追加
print_r($ggg);//Array ( [0] => かき [1] => りんご [2] => みかん [3] => なし [4] => いちご [5] => バナナ )
print_r($jjj);//要素の個数:6
$kkk=array_slice($ggg,2,2); //配列の3番目から2個の値を取り出す。
print_r($kkk);//Array ( [0] => みかん [1] => なし )
$kkk=array_slice($ggg,2); //配列の3番目以降の値を取り出す。
print_r($kkk);//Array ( [0] => みかん [1] => なし [2] => いちご [3] => バナナ )
foreach($kkk as $n){
echo($n."\n"); //みかん なし いちご
}
$lll=["apple"=>"りんご","orrange"=>"みかん","pear"=>"なし"];
foreach($lll as $key=>$n){ //配列を変数に順番に格納する。例は連想配列
echo("キーは".$key."、値は".$n."<br />");//キーはapple、値はりんご キーはorrange、値はみかん キーはpear、値はなし
}
$mmm=["りんご","みかん","なし"];
list($fruit1,$fruit2,$fruit3)=$mmm;//配列を変数に格納する。explodeと一緒に使うこと多い
echo($fruit1.$fruit2.$fruit3);//りんごみかんなし
$nnn=compact("fruit3","fruit2","fruit1"); //変数名をキーとして連想配列を作る。$記号は入れない。
print_r($nnn); //Array ( [fruit3] => なし [fruit2] => みかん [fruit1] => りんご )
?>
JavaScriptの配列
newの後には関数名(=クラス名)、newに続けて関数名を書いた時、その関数をコンストラクタとして呼び出す。newの後の関数名は必ず大文字(小文字だと動かない)。
配列生成はコンストラクタではなく、リテラル式が推奨、配列に1つの引数のみを指定した場合は、配列の長さを指定したことになる。
JavaScriptの連想配列はObjectオブジェクトのインスタンスになってしまうため、Objectが持っていないlengthプロパティはundefinedになる。Arrayオブジェクトはlengthプロパティを持っているので、長さを調べることができる。
javascriptのデバッグ時の中身確認は、console.log(aaa);を使い、F12でFirebugとかを起動して確認する。
<script>
var aaa=new Array("りんご","みかん","なし"); //Arrayコンストラクタを使って配列作成
document.write(aaa[0]+"<br />");
var bbb=["りんご","みかん","なし"]; //リテラル式での作成
document.write(bbb[0]+"<br />");
var ccc=new Array(5); //[,,,,]
var ddd={x:"りんご",y:"みかん",z:"なし"}; //japascriptの連想配列はArrayではなくobject
document.write(ddd.x+"<br />");
var eee={x:"りんご",y:"みかん",z:"なし"}; //取り出し方は↑の.とこのやりかた
document.write(eee['x']+"<br />");
var fff={"apple":"りんご","orrange":"みかん","pear":"なし"}; //連想配列のリテラル式
document.write(fff['pear']+"<br />");
var ggg={"apple":"りんご","orrange":"みかん","pear":"なし"};
document.write(ggg.orrange+"<br />"); //取り出し方
var hhh=bbb.length;
document.write(hhh+"<br />"); //3
var iii=ggg.length;
document.write(iii+"<br />"); //undefined
aaa.sort(); //配列をソートする["なし","みかん","りんご"]
document.write(aaa[0]+"<br />"); //なし
aaa.push("ぶどう"); //引数を最後尾に追加["なし","みかん","りんご","ぶどう"]
document.write(aaa[3]+"<br />"); //ぶどう
aaa.reverse(); //配列を逆順に入れ替える["ぶどう","りんご","みかん","なし"]
document.write(aaa[3]+"<br />"); //なし
var jjj=aaa.shift(); //先頭の要素を削除["りんご","みかん","なし"]、戻り値は削除した値["ぶどう"]
document.write(aaa[0]+"<br />"); //りんご
document.write(jjj+"<br />"); //ぶどう
var kkk=aaa.pop(); //最後の要素を削除["りんご","みかん"]、戻り値は削除した値["なし"]
document.write(aaa[0]+"<br />"); //りんご
document.write(kkk+"<br />"); //なし
aaa.unshift("なし"); //引数を先頭に追加["なし","りんご","みかん"]
document.write(aaa[0]+"<br />"); //なし
var lll=aaa.slice(0,2); //0番目からから2個の引数を取り出す["なし","りんご"]
document.write(lll[1]+"<br />"); //りんご
var mmm=lll.concat(kkk); //配列を足しあわせて、mmmにコピーする。元の配列は破壊されない。
console.log(mmm); //["なし","りんご","なし"]
var nnn=mmm.join("") //配列を足しあわせて文字列にして、nnnにコピーする。元の配列は破壊されない。引数内の記号で連結される。
console.log(nnn); //["なしりんごなし"]
var key;
for (key in mmm){ //配列のキーを順番に取り出して、key変数に格納する。
console.log("index:" + key);//0,1,2
console.log("data:" + mmm[key]);//なし,りんご,なし
}
delete mmm[0];
console.log(mmm);//[undefined, "りんご", "みかん"]
</script>
なお、newを使用してArrayをオブジェクトとして生成した場合も、newを使用せずに、配列リテラルとして生成した場合も、typeofで返るのは共にObjectである。片方がArrayとかにはならない。
こういう理由もあり、配列生成はコンストラクタよりリテラルの方がいい。
<script>
var a = ["abc",2];
var b = new Array("abc",2);
alert(typeof a);//object
alert(typeof b);//object
</script>
すなわち、どちらの方法で作られた配列もオブジェクトであるために、値は参照、つまり、単純コピーではコピー側の値をいじると、コピー元の値も同時に変わってしまう。
<script> var h = new Array(2,3); var i = h; i[0] = 50; console.log(h[0]);//50となる。iの値を変えてもhの値も同時に変わる。配列リテラルでも同様 </script>
コメントor補足情報orご指摘あればをお願いします。
- << 前のページ
- 次のページ >>
