三愛企画ブログ

suguru 【PHP】array_searchとifの組み合わせでの挙動

プログラムを書いていて、少しつまづいた所があったので投稿。

以下のコードを実行すると、

$array = array('りんご' , 'ごりら', 'らっぱ', 'ぱんだ', 'だちょう');
$hoge = 'りんご';

if(array_search($hoge , $array)){
echo 'OK';
}
else{
echo 'NG';
}
なぜかNGを返す。

$hogeにりんご以外の値を代入するとOKを返して、in_arrayで試した場合はりんごでもOKを返した。
りんごの時にarray_searchで返す値が原因かもと思い調べてみたところビンゴ。


$hoge = '0';

if($hoge){
echo 'OK';
}
else{
echo 'NG';
}

上記はNGを返す。
型がなんであってもifに「0」が入るとfalseと判定してしまいelseに処理が行ってしまうようだ。

よって下記コードで対応した。


$array = array('りんご' , 'ごりら', 'らっぱ', 'ぱんだ', 'だちょう');
$hoge = 'りんご';

if(array_search($hoge , $array) > -1){
echo 'OK';
}
else{
echo 'NG';
}

「0」が入る可能性があるときは気をつけなきゃ。

suguruさんの投稿 | Published in php | 2009.12.25

tanaka propelとmysql間のデータ型の変換表

propel使用時にデータ型が合わないということが良くあります(私だけ?)

そんなときのため変換表を作りました。

テキスト型
propel 備考 mysql phpデータタイプ
CHAR Fixed-lenght character data CHAR string
VARCHAR Variable-lenght character data VARCHAR string
LONGVARCHAR Long variable-length character data TEXT string
CLOB Character LOB (locator object) LONGTEXT string

数値型
propel 備考 mysql phpデータタイプ
NUMERIC Numeric data DECIMAL string (PHP int is limited)
DECIMAL Decimal data DECIMAL string (PHP int is limited)
TINYINT Tiny integer TINYINT int
SMALLINT Small integer SMALLINT int
INTEGER Integer INTEGER int
BIGINT Large integer BIGINT string (PHP int is limited)
REAL Real number REAL double
FLOAT Floating point number FLOAT double
DOUBLE Floating point number DOUBLE double

tanakaさんの投稿 | Published in php, symfony | 2009.6.1

tanaka apache php ウィンドウズへのインストール

おはようございます。 tanakaです。

今日は備忘録的な投稿を。
apache2.2php 5.2.7symfony1.2などリリース続いています。

ウィンドウズへインストールする機会があったので作業メモを。
  1. apacheインストール
    apacheはインストーラが便利なのでインストーラ版をダウンロードし適当にインストールを行います。
  2. phpインストール
    phpはメンテナンスを考慮し、ウィンドウズ版 zip package をダウンロードし解凍後にc:\ ドライブの直下へフォルダ名をphp へリネームし保存します。
  3. apache設定
    インストーラで保存されたhttpd.confを編集します。
    C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf

    <IfModule mime_module>ディレクティブに下記を追加します。
    行末に下記を加えます。
    PHPIniDir “C:\PHP”
    LoadModule php5_module “C:/PHP/php5apache2_2.dll”
  4. php.ini設定c:\php フォルダにある php.ini-dist ファイルをコピーし php.ini にリネームします。
    エディタで php.ini を開き extension_dir を検索しましょう。下記に変更します。
    extension_dir = “./” → extension_dir = “./ext”

    mbstringを適用しましょう。
    mbstringを検索し、下記のように修正します。(行頭のセミコロンを削除)
    ;extension=php_mbstring.dll → extension=php_mbstring.dll
    gdやpdoなんかも一緒に適用しましょう。
  5. apache再起動
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs
に仮でphpinfoのソースを置いて実際にテストしてみましょう。

いかがでしたでしょうか。

tanakaさんの投稿 | Published in php, server, 未分類 | 2008.12.6

iwatani PHPで複数APIを利用する時の高速化

先日、
マッシュアップに必須!PHPで複数APIを同時に叩いて超高速化するサンプル
という記事を発見しました。

概要としては、通常APIを複数利用するときなどはAPIにリクエストし、結果が返ってきたら次のAPIにリスエストを行いますが
multiRequest関数を利用すると複数のAPIに同時にリクエストを行うため高速化されるというものです。

早速、試しに便利ツールTipsにあるRank Checker(Google|Yahoo|MSN|Baidu)を改良して実験してみます。今回は開発環境でsymfonyのレンダリングを使って計測します。

Rank Checker(Google|Yahoo|MSN|Baidu)はそれぞれの検索エンジンで検索結果を取得し、URLの順位を拾って表示しています。上位から順に確認して検索結果でURLが見つかった時点で次の動作に移るようにしてあるので検索結果にURLが見つからない場合が一番処理が長くなってしまいます。

例えば
キーワード 三愛企画
URL http://www.iii-planning.com/
をチェックしてみると2281msですが



キーワード ネイル
URL http://www.iii-planning.com/
だと29806msもかかってしまいます。



そこでmultiRequest関数を利用すると3433msまで短縮されました。



今回の結果では約9倍の処理速度が得られました。
処理速度はいろいろな状況で変化するので一概には言えませんが複数APIを利用するときにはかなり使えそうです。

タグ:, ,

iwataniさんの投稿 | Published in php | 2008.10.17