<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>フロントエンドエンジニアの覚え書き</title>
    <description>技術的なメモを残しております、あなたの開発にお役立てください。</description>
    <link>http://frontend.blog.shinobi.jp/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>連想配列のソート</title>
      <description>連想配列のソートでこれまで色々と苦労してきたんですが、ついさっきものすごい便利な関数を発見しました。&lt;br /&gt;
その名も array_multisort 。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[PHP] &lt;br /&gt;
&lt;br /&gt;
// ソートしたい配列を定義&lt;br /&gt;
$dataArray[0]['name'] = '太郎';&lt;br /&gt;
$dataArray[0]['age'] = '15';&lt;br /&gt;
$dataArray[1]['name'] = '花子';&lt;br /&gt;
$dataArray[1]['age'] = '5';&lt;br /&gt;
$dataArray[2]['name'] = '清盛';&lt;br /&gt;
$dataArray[2]['age'] = '45';&lt;br /&gt;
&lt;br /&gt;
// ソートしたい項目を定義&lt;br /&gt;
$sort = 'age';&lt;br /&gt;
&lt;br /&gt;
// ソートの順序を定義&lt;br /&gt;
$order = 'DESC';&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ソートの開始&lt;br /&gt;
// マルチソートに使用する配列を生成&lt;br /&gt;
$arrayForSort = array();&lt;br /&gt;
foreach ($dataArray as $data) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $arrayForSort[] = $data[$sort];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ソートの順序（昇順/降順）を決定&lt;br /&gt;
if (ereg(&amp;quot;(desc|Desc|DESC)&amp;quot;, $order)) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $order = SORT_DESC;&lt;br /&gt;
} else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $order = SORT_ASC;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ソートの実行&lt;br /&gt;
array_multisort($forSort, $order, $dataArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// 結果の表示&lt;br /&gt;
print_r($dataArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
結果については割愛しますが、上記の例でいくと、清盛&amp;rarr;太郎&amp;rarr;花子の順になります。&lt;br /&gt;
関数化しようとしてたせいか、なんだか間延びしたコードですが、気にせず必要な部分だけ使ってください（笑）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[参考文献]&lt;br /&gt;
&lt;a href=&quot;http://www.akiyan.com/blog/archives/2007/10/phparray_multis.html&quot;&gt;www.akiyan.com/blog/archives/2007/10/phparray_multis.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://jp2.php.net/array_multisort&quot;&gt;jp2.php.net/array_multisort&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br type=&quot;_moz&quot; /&gt;</description> 
      <link>http://frontend.blog.shinobi.jp/php/%E9%80%A3%E6%83%B3%E9%85%8D%E5%88%97%E3%81%AE%E3%82%BD%E3%83%BC%E3%83%88</link> 
    </item>
    <item>
      <title>半角/全角の変換方法</title>
      <description>「全角ひら」から「半角カナ」などの文字列変換で便利なのが、mb_convert_kana関数です。&lt;br /&gt;
&lt;br /&gt;
私は、キーワード検索をサイト内に設置したときにお客様から「検索条件を収集・蓄積したい」というご要望があったときに使いました。&lt;br /&gt;
「テスト」と「ﾃｽﾄ」が別の単語になっちゃうのは好ましくなかったので。&lt;br /&gt;
&lt;br /&gt;
使い方は簡単！というかマニュアルそのまんま。&lt;br /&gt;
第2引数の文字列で、どんな変換をするのかを指定しています。&lt;br /&gt;
詳しくは参考文献を参照してください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[PHP]&lt;br /&gt;
//（半角が存在する）文字列を半角に変換&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 187);&quot;&gt;$str &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 187);&quot;&gt;mb_convert_kana&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 187);&quot;&gt;$str&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(221, 0, 0);&quot;&gt;&amp;quot;rnask&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;, &amp;quot;Shift_JIS&amp;quot;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[参考文献]&lt;br /&gt;
&lt;a href=&quot;http://jp.php.net/mb_convert_kana&quot;&gt;jp.php.net/mb_convert_kana&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br type=&quot;_moz&quot; /&gt;</description> 
      <link>http://frontend.blog.shinobi.jp/php/%E5%8D%8A%E8%A7%92-%E5%85%A8%E8%A7%92%E3%81%AE%E5%A4%89%E6%8F%9B%E6%96%B9%E6%B3%95</link> 
    </item>
    <item>
      <title>MySQLの文字列型を数値としてソート</title>
      <description>数値をvarchar型で格納している場合、普通にORDER BYでソートすると、以下のような意図しない順序になることがあります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
number&lt;br /&gt;
-------------&lt;br /&gt;
100&lt;br /&gt;
1000&lt;br /&gt;
200&lt;br /&gt;
2000&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
これを「ORDER BY (number + 0)」でソートしてやると、数値としてソートされます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
number&lt;br /&gt;
-------------&lt;br /&gt;
100&lt;br /&gt;
200&lt;br /&gt;
1000&lt;br /&gt;
2000&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[参考文献]&lt;br /&gt;
&lt;a href=&quot;http://blog.tsukubasi.jp/araki/archives/135&quot;&gt;blog.tsukubasi.jp/araki/archives/135&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://frontend.blog.shinobi.jp/mysql/mysql%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E5%9E%8B%E3%82%92%E6%95%B0%E5%80%A4%E3%81%A8%E3%81%97%E3%81%A6%E3%82%BD%E3%83%BC%E3%83%88</link> 
    </item>
    <item>
      <title>アクセスログに情報を出力する方法</title>
      <description>「ユーザの動向を解析したい」という要件が、最近増えているように思います。&lt;br /&gt;
で、アクセスログに好きな情報を出力する方法を見つけました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[参考文献]&lt;br /&gt;
「apacheのログに好きな情報を出す方法（PHP編）」&lt;br /&gt;
&lt;a href=&quot;http://neta.ywcafe.net/000607.html&quot;&gt;neta.ywcafe.net/000607.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
簡単にいうと、&lt;br /&gt;
1. httpd.confのログフォーマットの箇所を修正&lt;br /&gt;
2. apache_note()関数でログへ出力&lt;br /&gt;
という感じです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ログ系の関数といえばerror_log()関数なんかもありますよね。&lt;br /&gt;
意外と知らない人が多いんですが、こっちも便利ですよ。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://frontend.blog.shinobi.jp/php/%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%AD%E3%82%B0%E3%81%AB%E6%83%85%E5%A0%B1%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95</link> 
    </item>
    <item>
      <title>header()の後のexit</title>
      <description>忙しくてなかなかメモをとる（記事を書く）時間がありませんで、書きたいことだけが貯まっていってます（汗）&lt;br /&gt;
とりあえず、再開一発目は軽いやつから。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
header()関数でリダイレクトをすることはよくあると思いますが、その後にexitを記述していなかったことが原因でDoCoMoの携帯端末で不具合が起きていました。&lt;br /&gt;
headerがどんどんたまってっちゃうんですかね。。。&lt;br /&gt;
そこらへんのことには触れず、とりあえずheader()の後はexitしときましょう！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[php]&lt;br /&gt;
&lt;br /&gt;
header(&amp;quot;Location: http://hoge.com/&amp;quot;);&lt;br /&gt;
exit;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[参考文献]&lt;br /&gt;
&lt;a href=&quot;http://www.scollabo.com/banban/php/ref/ref_header.html&quot;&gt;www.scollabo.com/banban/php/ref/ref_header.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://frontend.blog.shinobi.jp/php/header--%E3%81%AE%E5%BE%8C%E3%81%AEexit</link> 
    </item>
    <item>
      <title>DBに保存したバイナリデータをブラウザで表示する</title>
      <description>画像をファイルとして保持するのではなくて、DBにバイナリとして保持する方法&amp;amp;表示する方法をメモっておきます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
まず画像をbase64_encode()でエンコードしてDBに登録します。&lt;br /&gt;
表示するときが少しめんどくさくて、以下のような感じでできました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[HTML] hoge.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;view_image.php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[PHP] view_image.php&lt;br /&gt;
&lt;br /&gt;
$base64ImgData = DBから画像データを取得する処理();&lt;br /&gt;
&lt;br /&gt;
header(&amp;quot;Content-type: image/gif&amp;quot;);&amp;nbsp;&amp;nbsp; // gifの場合&lt;br /&gt;
echo base64_decode($base64ImgData);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
imgタグのsrc属性に直接バイナリを記述する方法は、最近のブラウザでは対応してないものがあるんだそうで、上記のように画像出力用のPHPなどを用意するのが良いそうです。&lt;br /&gt;</description> 
      <link>http://frontend.blog.shinobi.jp/php/db%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%9F%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B</link> 
    </item>
    <item>
      <title>大量のメール送信</title>
      <description>メールを大量に送信したい場合、mb_send_mail() ではなくPEAR::Mail あるいは PEAR::Mail_Queueを使用した方がいいとのこと。&lt;br /&gt;
mb_send_mailはメール送信の際にSMTPソケットを開閉するので、タイムアウトの原因になるんだとか。&lt;br /&gt;
&lt;br /&gt;
参考サイトは以下の通りです。&lt;br /&gt;
&lt;a href=&quot;http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1016176975&quot;&gt;detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1016176975&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.drk7.jp/MT/archives/000890.html&quot;&gt;www.drk7.jp/MT/archives/000890.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://ml.php.gr.jp/pipermail/php-users/2005-September/027438.html&quot;&gt;ml.php.gr.jp/pipermail/php-users/2005-September/027438.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
あと、メールログが貯まりすぎて止まってしまうのではないか、という見解があったのでそちらも載せておきます。&lt;br /&gt;
&lt;a href=&quot;http://oshiete1.watch.impress.co.jp/qa2507654.html&quot;&gt;oshiete1.watch.impress.co.jp/qa2507654.html&lt;/a&gt;&lt;a href=&quot;http://okwave.jp/qa1167364.html&quot;&gt;okwave.jp/qa1167364.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
ちなみに、mb_send_mail()が大量のメール配信に向いていないことはドキュメントにもしっかり載ってます（笑）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://frontend.blog.shinobi.jp/php/%E5%A4%A7%E9%87%8F%E3%81%AE%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1</link> 
    </item>
    <item>
      <title>MySQLで左に文字を詰める（001とか）</title>
      <description>MySQLで左に指定の文字を詰める関数があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[MySQL]&lt;br /&gt;
&lt;br /&gt;
lpad('123', 5, '0');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ってやると、00123になります。&lt;br /&gt;
この関数をどうしてメモるかって、非常に検索しづらいからですな。&lt;br /&gt;
「桁合わせ」とか「001」とかで検索して四苦八苦しました（笑）&lt;br /&gt;</description> 
      <link>http://frontend.blog.shinobi.jp/mysql/mysql%E3%81%A7%E5%B7%A6%E3%81%AB%E6%96%87%E5%AD%97%E3%82%92%E8%A9%B0%E3%82%81%E3%82%8B%EF%BC%88001%E3%81%A8%E3%81%8B%EF%BC%89</link> 
    </item>
    <item>
      <title>正規表現で半角文字をマッチさせる方法</title>
      <description>全角文字のみ入力可能にしたい、という要求があったので調べてみました。&lt;br /&gt;
はじめはゴリ押しで半角文字を全部書くのを思いついたんですが、どうもスマートじゃないと思ったわけです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
正規表現で、英文の半角空白からチルダ (~)まで( !&amp;quot;#$%&amp;amp;'()*+,-./0〜9:;&amp;lt;=&amp;gt;?@A〜Z[\]^_`a〜z{|}~ )&lt;br /&gt;
をマッチさせるのは、以下のように文字コードを指定して書きます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[正規表現と使用例]&lt;br /&gt;
&lt;br /&gt;
$result = ereg(&amp;quot;[\x20-\x7E]&amp;quot;, $string]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
うーん、こりゃ便利！&lt;br /&gt;
他の案件でも使おっと（笑）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- 2007/0704 追記 -----&lt;br /&gt;
コメントでもご指摘のあったように、2バイト目に「￥（半角）」なんかを含む文字は結構あるようです。&lt;br /&gt;
で、新しく考えたのは以下の通り&amp;darr;。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[ PHP ]&lt;br /&gt;
if (ereg(&amp;quot;(^|[^\x81-\x9F\xE0-\xFC])[\x21-\x7f]&amp;quot;, $_GET[&amp;quot;name&amp;quot;])){&lt;br /&gt;
&amp;nbsp; echo '半角文字を含む！';&lt;br /&gt;
} else {&lt;br /&gt;
&amp;nbsp; echo '半角文字を含まない！';&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
記号がマッチした場合、その直前の文字が「文字列の先頭」か「漢字コードの1バイト目で使われるコードではない」場合、記号を含むと判断しています。&lt;br /&gt;
とは書いてみたものの、まだ不安だなぁ・・・文字コード関連については時間を見つけて勉強しないと。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[参考文献]&lt;br /&gt;
&lt;a href=&quot;http://www.kent-web.com/pubc/jcode/&quot;&gt;www.kent-web.com/pubc/jcode/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.psl.ne.jp/perl/pdojo00c.html&quot;&gt;www.psl.ne.jp/perl/pdojo00c.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.psl.ne.jp/perl/pdojo00b.html&quot;&gt;www.psl.ne.jp/perl/pdojo00b.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://ash.jp/code/unitbl21.htm&quot;&gt;ash.jp/code/unitbl21.htm&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://frontend.blog.shinobi.jp/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%81%A7%E5%8D%8A%E8%A7%92%E6%96%87%E5%AD%97%E3%82%92%E3%83%9E%E3%83%83%E3%83%81%E3%81%95%E3%81%9B%E3%82%8B%E6%96%B9%E6%B3%95</link> 
    </item>
    <item>
      <title>GoogleMapの利用、IEでエラー</title>
      <description>Webサイトに地図を載せようと思って、前からやってみたかったGoogleMapを使ってみることにしました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
まず気になったのは「商用利用可能なのか？」という点でしたが可能らしい、というか超推奨。&lt;br /&gt;
日本語では、&lt;br /&gt;
「マップ API は、非営利であればどんなウェブサイトでも無償で利用できるベータ サービスです。」（http://code.google.com/intl/ja_ALL/apis/maps/ から引用）&lt;br /&gt;
と、ダメっぽい表現になっていますが、実際には&lt;br /&gt;
「一般人が無償でアクセスできるWebサイトであればOK（メインコンテンツが無償でなければならない）」&lt;br /&gt;
ということなんだとか。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
で、実際に利用してみました。&lt;br /&gt;
まずは、本家サイトから登録。&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/intl/ja_ALL/apis/maps/ &quot;&gt;code.google.com/intl/ja_ALL/apis/maps/ &lt;/a&gt;&lt;br /&gt;
そうすると、キーとサンプルコードがもらえます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
サンプルコードを流用すれば地図は表示できます。&lt;br /&gt;
大きさは地図が表示されるDIVタグの大きさを変えればOK（CSS）。&lt;br /&gt;
表示の初期位置はちょっと面倒で、ジオコーディングで緯度と経度を取得する必要があります。&lt;br /&gt;
自分はGoogleが用意してるWebツールを使ったのですが、ぶっちゃけわかりづらいです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
この点については、『Geekなページ』に便利なツールがあったので、使わせてもらうのが良いと思います。&lt;br /&gt;
マーカーやコントローラの設定など、わかりやすく解説されていてとても助かりました。&lt;br /&gt;
&lt;a href=&quot;http://www.geekpage.jp/web/google-maps-api/&quot;&gt;www.geekpage.jp/web/google-maps-api/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
というわけで、細かい設定方法などは上記のサイト様に任せて（汗）、自分はハマった点を書いておこうと思います。&lt;br /&gt;
とりあえずFireFoxでは問題なく動いたんですが、IE7ではダメでした。&lt;br /&gt;
まず、バージョンの指定を「v=2」から「v=2.x」に変更し、最新バージョンを利用するように変更しました。&lt;br /&gt;
&lt;br /&gt;
それでもなんだか表示崩れがありました。&lt;br /&gt;
色々ためして、以下の状態だと表示が崩れることがわかりました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[HTML]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a name=&amp;quot;map&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;map&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;hellip;えーと、IEはJavaScriptのgetElementById()でname属性も見るの&amp;hellip;？&lt;br /&gt;
半ば脱力しながら実装が終了しました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://frontend.blog.shinobi.jp/%E3%81%9D%E3%81%AE%E4%BB%96/googlemap%E3%81%AE%E5%88%A9%E7%94%A8%E3%80%81ie%E3%81%A7%E3%82%A8%E3%83%A9%E3%83%BC</link> 
    </item>

  </channel>
</rss>