PHP
PHPの豊富すぎる組み込みの関数の中でも、natsort関数はかなり高機能な関数の一つだと思います。他の言語なら本体に組み込まれることは有り得ないのではないでしょうか。 natsort ― "自然順"アルゴリズムで配列をソートする 説明 bool natsort ( array &$arr…
ワンライナー(1行スクリプト)の代名詞と言えばPerlでしょう*1。Perlにはワンライナー向けのコマンドラインオプションが多数用意されています。中でも-neオプションや-peオプションは強力で、入力行ごとの処理をループを使わずに簡潔に記述できます。Perlの…
openpearってプログラマ視点で非常に素晴らしいですよね。自分のライブラリをPEARパッケージにすると他のマシンにインストールするのが楽になるので、個人レベルでもコードの再利用が進むと思います。大人数で使うようなものなら尚更メリットは大きいと思い…
PHPには5.0.0以降SPL (Standard PHP Libray)という枠組みが導入されています。これにより、Iteratorインターフェースを実装したクラスのインスタンスであれば、foreach文で配列と同じように取り扱えます。自分でクラスを作るときもIteratorを実装すれば使う…
「array_unique関数がPHP5.2.9から後方互換性を失いました」の内容について、PHPの中の人も認識を改めたようです。次のようなタレコミがありました。 【速報】「sort()関数は相当おかしい」と PHP 開発者を訴えていた問題で、原告の hnw さんが最高裁で勝訴…
追記(2009/05/10 09:25):何をもって「関数に見える」かは人によると思いますが、下記のリストはリファレンスマニュアルのURLがfunction.*.phpとなっているものを引っ張ってきました。 PHPには一見関数に見えるけど関数ではないキーワードが多く存在します…
文字エンコーディングの変換を行うと、異なる2文字が同じ文字に変換されることがあります。このような文字を重複文字と呼ぶことにします。UTF-8→Shift_JISおよびUTF-8→EUC-JPについて、重複文字を自分用の資料としてまとめてみました。 MacOSX上のPHP5.2.9で…
Text_VariationProducerというPHPのクラスを作りましたので、紹介します。 Text_VariationProducerは、指定した全組み合わせの文字列を作り出すようなイテレータです。n重ループや分岐を書く代わりに、文字列の組み合わせパターンを簡単な文法で記述するだけ…
MacportsでSuhosinが入れられるように、githubに野良Portsを作りました。怪しい英語で説明も書いてみました:http://wiki.github.com/hnw/macports-repos-hnw Suhosinというのは「なぜSuhosinを使うのか」でも紹介しましたが、PHPのセキュリティレベル向上の…
「PHPの==がキモい件」でも書きましたが、PHPの==は数値っぽいものに対してアバウトな比較を行う演算子です。一方で、他の言語の==演算子は正確な比較を行うものばかりだと思います。他の言語の経験者がPHPのソースコードを読み書きする場合に、PHPの==演算…
さて、前回記事「PHPでメモリ上に一時ファイルを作る」では、file_get_contents関数でCSVファイル全体を取得して文字エンコーディングの変換を行い、変換結果に対してfgetcsv関数を利用しました。しかし、CSVファイルが巨大な場合にはfile_get_contentsを使…
「blog.plastik.jp » PHP5 の fgetcsv() で読み込み内容が腐る現象」という記事を読みました。fgetcsv()だとSJISのCSVファイルがうまく読めないので、UTF-8に直してテンポラリファイルに保存してfgetcsvで読み込む、という筋書きのようです。 ちゃんとtmpfil…
追記(2009/06/26):PHP 5.2.10以降、この問題は修正されています。「array_unique関数がPHP5.2.10から後方互換性を取り戻します」も併せてご覧ください。 2/26にPHP5.2.9がリリースされましたが、このバージョンからarray_unique関数が後方互換性を失いま…
追記(2009/02/28 15:35):ソートする配列の要素が数値または数値形式の文字列のみの場合は、が推移律を満たすので、この記事のような矛盾は起こりません。念のため。オヤジギャグがこらえられなくなったら立派なオヤジだと思います。それはさておき、今日…
PHPでmb_regex_encoding("UTF-16")すると、一見mb_ereg系関数が期待通りに動きません。
(2009/06/29)追記4:本記事のmb_trim関数が動かない環境があったので、詳細を「PCREはUnicode文字プロパティをサポートするとは限らない」にまとめました。よりポータブルなmb_trim関数も紹介していますので、併せてご覧ください。 追記:「mb_ereg_match(…
(2009/10/05追記)「サロゲートペアに相当する3バイト表現も正しいとみなしている」という件はバグとしてPHP5.3.0から修正されているようです。id:moriyoshiさんに超感謝。 PHPのmb_check_encoding関数の調査、おそらく今回が最終回です。今回はUTF-8につい…
前回に引き続き、PHPのmb_check_encoding関数について調べてみます。今回はEUC-JP、eucJP-win、CP51932の3つについて調べてみました。
(2009/02/15 17:20)「個人的な感想」を追記しました。また、下記はPHP5.2.1以降の挙動です。PHP5.2.0以前のmb_check_encodingは更にカオスなので、あまり使い物にならないと思います。 (2009/02/16 12:30)追記2:バグっぽいと思った件は本当にバグで、修正が…
下記のようなプログラムを与えると、PHPのparserが「無理っす」と言って死にます。
僕は滅多に使わないのですが、PHPにはarray_uniqueという関数があります。 array_unique ― 配列から重複した値を削除する 説明 array array_unique ( array $array [, int $sort_flags ] ) array を入力とし、値に重複のない新規配列を返します。 PHP: array…
補足(2010/12/01 03:00):floatからstringへのキャストで丸められる桁数についてですが、php.iniの設定値「precision」の影響を受けるようです。 僕は以前から「PHPの==はキモいから===を使おうよ」と言っているつもりです(参考:「PHPの==がキモい件」)。…
追記:1/13頃まで、install-all-php.shにバグがありました。ごめんなさい。今は全バージョンを一気にコンパイルできるはずです。 第38回PHP勉強会でも紹介しましたが、私はPHP5.0.0〜PHP5.2.8までの全バージョンのPHPバイナリを持っています。これはPHPのバ…
Suhosinプロジェクトのドキュメント「Suhosin - Why ?」を日本語訳してみました。慣れた方の翻訳とはかけ離れた出来だと思います。というのも、日本語として自然な言い回しに変えようとした部分があり、翻訳としては少々問題があるかもしれません。また、僕…
PHPで日付・時刻の処理を書く際、「strtotime()関数を使うと可読性が高くなって良い」と僕は思っていたのですが、全面的に信用するのは危険だと感じてきました。 strtotimeというのは、文字列をunix timeに変換する関数です。「2008-12-24 23:59:59」のよう…
第38回PHP勉強会に参加して、5分ほどLTをしました。勉強会の会場はトライコーン株式会社さんにお貸し頂きました。ありがとうございます。 発表資料:「PHPの全バージョンを揃えよう」(PDF) Ustream録画:http://www.ustream.tv/recorded/989155 (5:54) という…
PHPのround関数のリファレンスマニュアルのページに面白いコメントを見つけたので紹介します。
題名の通り、PHP5.2.7でround関数の実装が変更されました。12月8日付でPHP5.2.8がリリースされましたが、round関数についてはPHP5.2.7と同一です。 概要 ますがたさんの記事で既報ですが、bugs #42294に関してPHP5.2.7で修正が入り、round関数の実装が変わり…
(2016/07/02 20:00追記)本稿をさらに掘り下げた記事「PHPのround関数を読み解く (1)丸め桁数が大きすぎ・小さすぎる場合」「PHPの新しいround関数を読み解く (2)pre-roundingの意味」を書きました。合わせてご確認ください。 12月4日付でPHP5.2.7とPHP5.3.0a…
土曜日に開催されたCakePHPカンファレンス東京に、CakePHPに触った事もないのに行ってきました。CakePHPの中の人であるGarrettの話が聞けて良かったですね。 Garrettの話で印象深かったのは、CakePHPはバグチケット数を0にしてからじゃないとリリースしない…