$x = 0; switch($x) { case "hoge": echo "hoge"; break; default : echo "default"; break; }結果は"hoge"である。
数値と文字列の比較時、数値として評価出来ない文字列は0と解釈される仕様。
文字列#文字列の数値への変換を参照。
switch("$x") と文字列化しとくと吉。
$x = 0; echo $x == 0 ? 0 : $x == 1 ? 1 : 2;結果は2である。
$x == 0 ? 0 : ($x == 1 ? 1 : 2);
ではなく
($x == 0 ? 0 : $x == 1) ? 1 : 2;
と解釈される仕様。
演算子の優先順位の「結合時の評価」に関する説明を参照。
gpc はともかく、何かの拍子に runtime とか sybase が On になった日には
fopen() で読んできたデータが(0x00→0x5c 0x30, 0x27→0x27 0x27 と)化けたり
そのあおりで Zend_Auth_Adapter_Openid や Zend_Http_Response が gzinflate() に失敗して
PHP 5.3.0 で非推奨になって一安心。
つぅか、こんな機能捨てろよ。
fopen() で読んできたデータが(0x00→0x5c 0x30, 0x27→0x27 0x27 と)化けたり
そのあおりで Zend_Auth_Adapter_Openid や Zend_Http_Response が gzinflate() に失敗して
Warning: gzinflate() [function.gzinflate]: data error in /home/kou/local/lib/php/ZendFramework-1.10.5/library/Zend/Http/Response.php on line 609とか、原因分かるまで泥沼な罠が待ってる。
PHP 5.3.0 で非推奨になって一安心。
つぅか、こんな機能捨てろよ。
お前らちゃんとマルチバイト対応しろよと orz
php at dogpoop dot cjb dot net 16-Nov-2002 04:01
を mb_string で書き換えて、quote も変えられるようにしてみた。
php at dogpoop dot cjb dot net 16-Nov-2002 04:01
を mb_string で書き換えて、quote も変えられるようにしてみた。
function mb_str_getcsv($line, $delim = ',', $quote = '"') { // based on http://www.php.net/manual/ja/function.fgetcsv.php#26886 #$line: the csv line to be split #$delim: the delimiter to split by #$removeQuotes: if this is false, the quotation marks won't be removed from the fields $removeQuotes = true; $fields = array(); $fldCount = 0; $inQuotes = false; for ($i = 0; $i < mb_strlen($line); $i++) { if (!isset($fields[$fldCount])) $fields[$fldCount] = ""; $tmp = mb_substr($line, $i, mb_strlen($delim)); if ($tmp === $delim && !$inQuotes) { $fldCount++; $i += mb_strlen($delim) - 1; } else if ($fields[$fldCount] == "" && mb_substr($line, $i, 1) == $quote && !$inQuotes) { if (!$removeQuotes) $fields[$fldCount] .= mb_substr($line, $i, 1); $inQuotes = true; } else if (mb_substr($line, $i, 1) == $quote) { if (mb_substr($line, $i+1, 1) == $quote) { $i++; $fields[$fldCount] .= mb_substr($line, $i, 1); } else { if (!$removeQuotes) $fields[$fldCount] .= mb_substr($line, $i, 1); $inQuotes = false; } } else { $fields[$fldCount] .= mb_substr($line, $i, 1); } } return $fields; }このままだとファイルからの読み込み時に改行含んだフィールドに対応が出来ないんだが、こういう基本的なルーチン自分で書かんにゃならんのは嫌だ。
タグ
コメントをかく