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ご指摘あればをお願いします。

(件名or本文内でキーワード検索できます)



  • << 前のページ
  • 次のページ >>
ページトップへ