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ご指摘あればをお願いします。
- << 前のページ
- 次のページ >>