TechTweetこんにちは、アシアルの岡本です。とある事情により16進数の文字列を圧縮する必要に迫られました。URLに載せる必要があるのでバイナリは駄目ですzlib関数は使えません。「PHPのbase_convert関数を使って36進数に変えれば楽勝!」と思ったのが運のつき。長く険しい文字列圧縮の旅(大袈裟!)が始まってしまいました。base_convert関数は数値の基数を任意に変換するPHPの標準関数です。こいつを使えば10進数の数字を16進数に変換したり、16進数の数字を2進数に変換するといったことが一発で行えます。「ffffff」と8文字から6文字に25%も圧縮できるのです。精度が失われてしまうことがあります。試してみましたが、残念ならが事実でした。80バイトもあるような長い文字列で利用すると、似てるけど少し違う数字になってしまいます。文字列を適当な長さ(13桁までいけました)で区切る選択肢を選びました。して作り上げた圧縮クラスが以下のソースコードになります。分割しやすいよう0でパディングして、桁を分割したい数の倍数にする。$return);分割は、思ったより簡単ではありませんでした。分割した左辺に0があった場合は圧縮→解凍したときに0が取れてしまうので、パディングして直す必要があったり色々大変でした。このクラスは、完成というには程遠いですが(元の進数と圧縮に使う進数をsetするメソッドすらない...)ニーズがあるか知りたいので公開してしまいます。自由に使ってもらって構いませんが、無保証です。うん、後で弊社の小川に説教されるかも...手が空いたら、今度は自分でconvert処理を書くかもしれません。base_convertでは36進数が限界で62進数が使えないので。「クラス」といえばアシアルのスクールにオブジェクト編が追加されました。講師の小川の方が丁寧に正しいオブジェクトの書き方を教えますので、PHPでオブジェクト使ってみたい方は是非一度ご検討ください。byスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。