久しぶりにPHPプログラムを書いてみて、改めてActionScriptとの違いに勘が戻るまで時間がかかってしまった。
つまらないことに時間を割かないよう、今回はPHPとActionScriptのお作法の違いを残しておこうと思うと思う。
まずは変数定義として、配列を例に掲載。
PHP
$item_list = Array("バナナ","みかん","りんご","いちご");
$cost_list = Array(80,50,120,90);
$object = Array();
AS3.0
$item_list = Array("バナナ","みかん","りんご","いちご");
$cost_list = Array(80,50,120,90);
$object = Array();
PHPの場合、変数定義に$を付ける。久しぶりに書いたからどうしても忘れてしまう。
あとはnewを付けるとかってところが違うだけ。("var"はPHPでも使うし)
続いて、for文と、配列への要素の追加
PHP
for( $i = 0 ; $i < count($item_list) ; $i++ ){
$tmpArray["item"] = $item_list[$i];
$tmpArray["cost"] = $cost_list[$i];
array_push( $object, $tmpArray );
}
AS3.0
for( var i = 0 ; i < item_list.length ; i++ ){
var tmpArray = new Array();
tmpArray["item"] = item_list[i];
tmpArray["cost"] = cost_list[i];
object.push( tmpArray );
}
配列の要素数を数える方法が、PHPではcount(Array)で、ASではArray.lengthという違いがある。
配列への要素の追加方法はASの方が直感的で好き。
で、多次元配列になっている連想配列のソート方法はというと・・・
PHP
usort($object, create_function('$a,$b', 'return($a[\'cost\'] - $b[\'cost\']);'));
AS3.0
object.sortOn("cost",Array.NUMERIC);
PHPの場合、usortというユーザー定義の比較関数を使ってソートするのだ。使い方がちょっと難しいのが難点。
それに比べ、ASではsortOn()で指定してあげるだけ。便利。
最後に、連想配列の時の要素の取り出し方。
PHP
foreach($object as $key => $row){
print($row["item"]." : ".$row["cost"]."\n");
}
AS3.0
その1
for( var key in object ){
trace(object[key]["item"]+" : "+object[key]["cost"]);
}
その2
for each( var obj in object ){
trace(obj["item"]+" : "+obj["cost"]);
}
なるほど。
AS3で"for each"が追加されたそうなのだが、これだとキーが取り出せないんだよね。
それを考えると、この"for each"は用途が限定されてしまう。(その分、処理が早いのか?)
その点、PHPはキーも、それに対応するオブジェクトもいっぺんに取得できるのでよい。
そんな感じで、違いを残しつつソート部分は完全にメモ。
最近のコメント