PHP 配列と配列を合体させ、重複するキーは上書き

PHP

PHP 配列と配列を合体させ、重複するキーは上書き

次のようなシチュエーションで、array_mergeという関数を利用すると便利です。

 $hogehoge_array = array("type"=>"hoge","color" => "red", 2, 4);
 
 //途中なんらかの処理があり、hogehoge_arrayが次のように変わる
 
 $hogehoge_array = array("color" => "green", "shape" => "trapezoid", 4);

上記のままにしておくと、ただ単に$hogehoge_arrayが上書きされて、もともとあった”type”という項目がなくなってしまいます。

更新されなかった古い項目はそのまま(ここでは”type”)にして、新しい更新された項目は新しい値に変更したい場合、array_mergeを利用して次のように書けます。

 $hogehoge_array = array("type"=>"hoge","color" => "red", 2, 4);
 
 //途中なんらかの処理があり、hogehoge_arrayが次のように変わる
 //配列の名前を変更しておきます。
 
 $hogehoge_array_updated = array("color" => "green", "shape" => "trapezoid", 4);
 $hogehoge_array = array_merge($hogehoge_array, $hogehoge_array_updated);

PHP 連想配列の配列中に、特定の値がないか調べる

PHP

PHP 連想配列の配列中に、特定の値がないか調べる

配列の中にある値がないか調べるのはin_array でできますし、連想配列の中身を調べるのはforeachでも追加すればいいのですが、ちょっと面倒ですよね。

http://www.php.net/manual/ja/function.in-array.php

上記のサイトにあったサンプルコードが利用しやすかったので、メモがてら記録しておきます。。

 <?php
  //$needle は探したい値、$needle_fieldは探したいキーの名前、$haystackは探す配列
 function in_array_field($needle, $needle_field, $haystack, $strict = false) {
     if ($strict) {
        foreach ($haystack as $item)
            if (isset($item->$needle_field) && $item->$needle_field === $needle)
                return true;
    }
    else {
        foreach ($haystack as $item)
            if (isset($item->$needle_field) && $item->$needle_field == $needle)
                return true;
    }
    return false;
 }
 ?>

PHP 秒数を時分秒に変換

PHP

PHP 秒数を時:分:秒に変換

秒数を時:分:秒に変換します。PHPの関数などはないので、作るしかありません。。。
サンプルコードです。

 //183458秒を50:57:38に変換
 //秒を時:分:秒に変更
 
 $seconds = 183458;
 $time = s2h($seconds); // timeは 50:57:38
 
 function s2h($seconds) {
 	
 	$hours = floor($seconds / 3600);
 	$minutes = floor(($seconds / 60) % 60);
 	$seconds = $seconds % 60;
 	
 	$hms = sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds);
 	
 	return $hms;
 	
 }

PHP 日本語の正規表現が正常に動作しない

PHP

日本語に関する正規表現の判定がうまくいかない原因のひとつとして、正規表現エンジンが使用する文字コードが適切ではないことがあります。

下記スクリプトで正規表現処理に使う文字コードを確認することができます。

 echo mb_regex_encoding();
 

この結果がISO-8851等になっていることがあります。

例として、正規表現処理に使う文字コードをUTF-8にしたい場合は以下のようにします。

 mb_regex_encoding('UTF-8');
  • 参考リンク
  • -mbregex(マルチバイト正規表現)で気をつけるべきこと

http://wiki.poyo.jp/read/PHP/tips/mbstring/caution_mbregex

  • -鬼車

http://www.geocities.jp/kosako3/oniguruma/index_ja.html