アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

PHP

特定の文字より手前を切り出す

PHP

別に難しい話とか裏技とかではないですが、 たまに使うのを毎回ガチャガチャ書くのが面倒なので自分のコピペ用に。例えばメールアドレス「hogefuga@example.com」の「@」より前、 つまり「hogefuga」のみを切り出したいときなどに。 $str = "hogefuga@exampl…

配列に要素がなければ追加、あれば何もしない

PHP

例えば以下2つの配列があるとします。 $list_1 = array( 'hoge' => 1, 'fuga' => 2, ); $list_2 = array( 'fuga' => 20, 'piyo' => 30, ); これについて、以下操作をしたい場合。 $list_1になくて$list_2にあるキーに対する要素を$list_1に追加する $list_1…

配列同士・文字列同士を比較し、重複している要素を除く

PHP

例えば以下2つの配列があるとして $list_a = array("a", "b", "c"); $list_b = array("b", "d", "e"); $list_a から、$list_b に含まれている要素を除いて array("a", "c"); という配列にしたい場合、array_diff関数を使えば一発です。 $list_a = array("a",…

プレースホルダのいい感じの作り方

PHP

頭が悪いタイトル。例えば以下のようなクエリを組み立てることはよくあるのですが SELECT ... FROM ... WHERE `id` IN (1, 2, 3, ...) ここ。 IN (1, 2, 3, ...) ここをPHP上で組み立てるのに最初は苦労しましたが、今は以下のように書いています。 $param_l…

mecabとPHPで形態素解析

PHP

そもそも形態素解析とは? 文章を「言語で意味を持つ最小単位」に分割し、それぞれの品詞等を判別する作業。 参考:形態素解析 - Wikipedia 形態素解析すると具体的にどうなるの? 元の文字列 吾輩は猫である。名前はまだ無い。 どこで生れたかとんと見当が…

TwitterAPIを使ってみる

…使ってみたのはもう何年か前なんですけど。 自分用メモが残っていたのでブログに書き起こしておきます。<追記> 2019年3月現在、 API自体も結構変わっているようですし アプリケーションの認証などがありフローがこの記事と異なっています。 参考までにと…

自分でWebサービスを作ってみる その2

前回はちょっとした書き換えレベルだったので、もうちょっとマシなHelloWorldをする。 (HelloWorldから先に進めていない…) コントローラを作る 以下のコマンドでコントローラができる。 単に app/Http/Controllers にファイルを作るだけじゃいかんのか?と…

自分でWebサービスを作ってみる その1

「なんかWebシステムつくりたい!」ので、自力で環境構築からサンプルプログラム作成までを目指す。 絵描いてる人が休憩にらくがきしはじめるみたいなやつ。…とはいえ、いつもコーディングが主なので環境構築自体はやらないんですよね… 慣れない作業なので手…

array_columnのかんたん代替

PHP

PHP5.5.0以降で使えるarray_columnという関数があります。例えば以下のような二次元配列があったとして $list = array( array('hoge' => 1, 'fuga' => 100), array('hoge' => 2, 'fuga' => 200), array('hoge' => 3, 'fuga' => 300), );fugaの値だけを抜き出…

PHPのゆるやかな比較の怖さを改めて思い知るの巻

PHP

if (0 == "-") { return true; } else { return false; } これがtrueになったので「!?」となりました。 「0 == ""」や「0 == null」がtrueになるのは知っていましたが…。一体どういうことなのかを調べてみると、 こういうケースでは文字列をint化して比較す…

日時を扱ういろいろ PHP版

PHP

PHPでの日時の扱いについてですが、INT型のUnixタイムスタンプを用いるのが基本です。例えば現在の日時を「YYYY-MM-DD hh:mm:ss」という形で求める場合、 $datetime = date("Y-m-d H:i:s", time()) とします。 time()で現在のUnixタイムスタンプを取得し、そ…

マルチバイト文字列関数の罠

PHP

ある時、CSVのデータをインポートする処理で不具合が発生。 「2件のデータをまとめてインポートすると1件のみ失敗して、 成功したデータを除いて再度その1件のみをインポートすると成功した」 いやいやそんなアホな。色々調べた結果、この結論に至りました。…

ランダム文字列を生成する関数

PHP

以前に同タイトルの記事を書きましたがこちらはPHP版。↓こちらはVBA版。まあこちらも基本ロジックは一緒なんですが…honey8823.hateblo.jp private function makeRandomStr($strlen = 1) { // 使用可能な文字一覧 $randomstr = "abcdefghijklmnopqrstuvwxyz12…

特定の文字以降を別の文字列に置き換える

PHP

具体的には、「メールアドレスの@以降を*でマスクする」ロジック。 文字列処理の関数を多数使用できて面白かったのでメモ。 ただ、PHPならもっと簡単なロジックが作れそうな気も…? // 加工前のメールアドレス $mail_address = "hoge@fuga.com"; // 加工後の…

in_array VS array_search 速度検証

PHP

タイトル通り。わたしは普段「ある配列にある値があるかどうか」のチェックにin_arrayを用いていますが、 他の人のソースでarray_searchを用いているのを見かけたので 単純に気になって速度検証。 (in_arrayの方が速いんじゃないかなーという予想)検証コー…

正規化した絶対パスを取得する方法

PHP

/hoge/fuga/../piyo/./yomo/ ↓ /hoge/piyo/yomo…といい感じに変換してくれる関数はないものか…と思ったら、ありました。参考:realpath - php http://php.net/manual/ja/function.realpath.php $path = "/hoge/fuga/../piyo/./yomo/"; // 変数$newpathに正規…

特定のデータベースが存在するかどうか確認する

※MySQLを前提として書いていますクエリ一発で確認できます。 SHOW DATABASES LIKE 'DB名' DB名指定しなければ一覧取れます。 SHOW DATABASES さらに、PHPでユーザ入力値の名前のデータベースが存在するかどうか確認したかったんですが、 // クエリ生成 $quer…

OpenWeatherMapから近い天気予報を取得するロジック

PHP

弊社の社内ポータルサイト的なやつに天気予報を載せてるのですが (いや、そんなもんいらなくね? というツッコミはめんどくさいのでやらない) それが軽くバグってたのでこっそり修正しつつロジックまとめておく。天気予報は外部APIから取得しています。 ht…

カレントディレクトリを一旦変更してから元に戻す

(知らなかったとはいえ)あぶねーことしてたので反省がてら。 もしかしたら初心者レベルかもしれないアレでアレなんですが…サーバに置いてあるファイルを参照するシェルスクリプトをPHPから呼んでいたのですが、 シェルスクリプト内でファイルを相対パス指定…

PHP×mongoDBでいろいろな検証

環境 ・VMWareでCentOS5.8 ・PHP 5.4 ・MongoDB 2.6 countの速度検証 // $collection は new MongoCollection 云々で定義したやつ // $condition は取得条件の配列 // ① $count_a = $collection->count($condition); // ② $count_b = $collection->find($con…

文字列の集合をインデックスごとに分ける方法

PHP

「あいす」→あ行 「ほげ」→は行 …のような感じで、頭文字からインデックスの文字を求める方法のことですね。どうすればいいかはまあ分かりますけど、 もっと画期的な方法はないかなーと思いつつググってみたら、こんなQ&Aがありました。 oshiete.goo.ne.jp …

XMLデータを多次元配列にキャストする関数

PHP

…というのを作ったのでメモ。 呼び出し元の処理例(場合によってはこのへんから関数に書き起こしても良い) // まずはファイルからテキスト状態で取得 $text_data = file_get_contents(/* XMLファイルのパス */); // ファイルが有効であれば以下処理 if ($te…

【未解決】二次元配列Aを、配列Bに指定された順にソートする方法

// 配列A $hoge = array( array('fuga' => 1), array('fuga' => 2), array('fuga' => 3), ); // 配列B $fuga = array(2,1,3); という2つの配列があるとして、配列A($hoge)を↓のようにソートしたい。 $hoge = array( array('fuga' => 2), array('fuga' => 1),…

指定文字以降を削除する方法と速度検証

PHP

「hogehogefugafuga(piyo)」から 「(」以降を削除(=「(」より前を抜き出す)して 「hogehogefugafuga」にしたいというとき。 まあやり方の想像は付くが、自分が思いつくのより良い案もあるかもしれないのでとりあえずググる。参考:【PHP】指定文字列以降…

文字列のパディング

PHP

文字列をある桁数にするために、足りない分を任意の文字で埋める方法。 str_pad(値, 文字数, [埋める文字], [左右どちらを埋めるか]) 埋める文字を省略すると半角スペースが使用される。 また、どちらを埋めるかは、 STR_PAD_RIGHT:右側を埋める(=左寄せ…

配列内の空要素を削除する

PHP

ある配列から空の要素(0、空文字、空配列…など)を取り除きたい時は array_filter関数に突っ込むだけでOKのようです。便利。ここにゴミ配列があるじゃろ? $hoge = array( 0 => array(), 1 => array("", ""), 2 => array("a", "b"), 3 => "", 4 => "hoge", …

【未解決】ワイルドカードとエスケープ

※MySQLを前提として書いています ※この記事では、MySQLのバージョンは5.6です ※以下、「\」となっているのは半角バックスラッシュです。SQLのワイルドカードには「%」と「_」があります。 -- 「hoge」で前方一致検索 SELECT * FROM `table` WHERE `column` L…

大量のテストデータを作る

※MySQLを前提として書いています WEBアプリ・データベースにデータを作る話。少なくとも自分の場合、テストデータを作るときは大きく分けて下記の3パターンがあります。 ロジックのテスト等の用途で、パターンを網羅したデータを揃える 負荷テスト等の用途で…

デバッグでよく使うやつ

PHP

変数の中身などを表示する echo, print, print_r, var_dump, exit を使い分けますが、大体はvar_dump。 統一しておくとgrepかけやすいので。 var_dump($hoge); exit("--- ここまでOK ---"); 処理時間を計る 計りたい部分の最初と最後に埋め込んで使う。 処理…

日替わりランダム値

PHP

「○○ごとに結果が異なるランダム値を出す」メモまとめ。基本的に、「○○ごと」というのを数値化してseed値にすればOK。 // 実行するごとに異なる値(seed初期化) srand(); print(rand(1,10)); // 1日ごとに異なる値(seedに現在の日付を設定) srand(strtoti…