ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

PHPのwhileとforeach

PHPの配列総なめの書き方で、自分はいつも

 foreach($ary as $key => $val) ...
だったけれど、いろんなサイト見て回ると

 while($list($key,$val) = each($ary)) ...
みたいな書き方をよく見かけた。

1年ぐらいPHP触ってたけど、これ見るまでeach関数なんて知らなかった。
(車の免許とって3週間目みたいな、慣れてきたせいで
 一番事故起こしやすいレベルのPHP歴なんだろうなぁ)

なんかくやしかったので、
配列長100,000を二つの方法でループさせて時間計測。

while time: 0.34173083305359
foreach time: 0.11416602134705
(while/foreach)*100 = 299.32796905901

foreach time: 0.08992600440979
while time: 0.33068990707397
(while/foreach)*100 = 367.73557242356
(PHP5.1.6 Apache/2.2.3)

何回やってもforeachのほうが3~4倍早かった!
よし、くやしくなくなった。


コード
<?php
$time_while = 0;
$time_foreach = 0;

//ループさせる配列長
$length=100000;

//whileを先に計測----------------------------
$time_while = execute_while($length);
$time_foreach = execute_foreach($length);

echo "while time: ${time_while}\n";
echo "foreach time: ${time_foreach}\n";
echo "(while/foreach)*100 = ". ($time_while/$time_foreach)*100 ."\n";
echo '\n';

//foreachを先に計測--------------------------
$time_foreach = execute_foreach($length);
$time_while = execute_while($length);

echo "foreach time: ${time_foreach}\n";
echo "while time: ${time_while}\n";
echo "(while/foreach)*100 = '. ($time_while/$time_foreach)*100 ."\n";
echo '\n';
exit();

//現在時刻を取得する関数
function getmicro(){
  list($msec, $sec) = explode(" ", microtime());
  return ((float)$sec + (float)$msec);
}
//whileでlength回ループする関数
function execute_while($length){
  //配列作成
  $ary = array();
  for($i=0; $i<$length; $i++) $ary[] = "num.$i";
  //計測開始
  $time = getmicro();
  while(list($key, $val) = each($ary)) $ary[$key] = $val .= "read";
  return getmicro() - $time;
}

//foreachでlength回ループする関数
function execute_foreach($length){
  //配列作成
  $ary = array();
  for($i=0; $i<$length; $i++) $ary[] = "num.$i";
  //計測開始
  $time = getmicro();
  foreach($ary as $key=>$val) $val .= "read";
  return getmicro() - $time;
}
?>




  1. 2007/01/09(火) 20:19:57|
  2. その他
  3. | トラックバック:0
  4. | コメント:2

ACLについて調べてみよう

ということでACLについていろいろ調べてみようと思う。
これからスタート。気長にいきましょー
  1. 2006/12/01(金) 11:21:54|
  2. ACL
  3. | トラックバック:1
  4. | コメント:0

VirtualPC 2004にFedoraCore6を入れてみる

VPCダウンロード。VPCインストール。
「HomeEditionはサポート対象外」だと言われたが気にしない。
FC6のDVDイメージをダウンロード。

VPCで新規のVMをウィザード形式で適当に作る。
DVDイメージを指定して実行・・・しようとしたけど、DVDイメージに対応していないらしいので、DAEMON TOOLSで仮想DVDを作ってそれを指定。

インストーラ起動。
CUIモードでインストール。言語で日本語を選択すると「それでもインストールは英語よ?」みたいな警告が出るが無視。一通りインストールして再起動。

vpc001.png

なんの設定だこれ。途中、日本語を選択したせいらしい。とりあえず右のボタンが「次へ」のような気がするのでそれを選択。

ログインして、とりあえずstartx

vpc002.png

おおー・・ぉ・・

/etc/X11/xorg.confを書き換え
DefaultDepth 24→16
Depth 24→16

vpc003.png

きたー
ネットワークもDHCPですぐ繋がったな
(coLinuxのときは結局繋げなかった・・・)

さて・・あとは
# yum -y update
で半日ほど放置すれば出来上がりかな?

VirtualPC 2004
http://www.microsoft.com/japan/windows/virtualpc/default.mspx

FedoraCore6
http://fedora.jp/
  1. 2006/11/30(木) 21:20:11|
  2. その他
  3. | トラックバック:0
  4. | コメント:0

sendmailのキュー

送信できなかったメールは下のどっちかのキューに溜まる。
/var/spool/mqueue
/var/spool/clientmqueue

mqueueのキューを送信するには
sendmail-q

clientmqueueのキューを送信するには
sendmail -q -Ac


  1. 2006/11/14(火) 17:07:39|
  2. sendmail
  3. | トラックバック:0
  4. | コメント:0

apacheにSSL入れる

(apache2.0)
SSLを動的モジュールとして組み込む。
./configure --enable-modules=so --enable-mods-shared=max --enable-ssl
make
make install
↑DSO有効にして、標準の動的モジュールを全部入れて、SSLも入れる。

apacheのconfディレクトリにssl.confが出来てる(たしかそのハズ)。
httpd.confでこれを読み込むようにすれば終了。
Include conf/ssl.conf
↑それっぽいところに追加

おしまい
  1. 2005/09/26(月) 18:51:00|
  2. Apache
  3. | トラックバック:0
  4. | コメント:0
前のページ 次のページ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。