使えそうなPHPのユーザー定義関数いろいろ

January 16th, 2014

今後使いそうな、PHPのユーザー定義関数をメモ。


NULL値と空文字の判定

NULLと空文字の場合のみtrueを返す関数。

// 1:文字列
function isNullEmpty($str) {
    if ($str) return false;
    $result = true;
    if ($str === 0 || $str === '0') $result = false;
    return $result;
}

文字列を配列に分割する(マルチバイト対応)

転載元:マルチバイト文字列を1文字ずつ配列に格納|適当に語ってみるテスツ

// 1:文字列, 2:文字コード
function mbStringToArray($sStr, $sEnc = 'UTF-8') {
    $aRes = array();
    while ($iLen = mb_strlen($sStr, $sEnc)) {
        array_push($aRes, mb_substr($sStr, 0, 1, $sEnc));
        $sStr = mb_substr($sStr, 1, $iLen, $sEnc);
    }
    return $aRes;
}

既存の日付かどうかをチャックする

「2014-02-31」のような存在しない日付が指定された場合、その月の最終日を返す関数。

// 1:日付(YYYY-MM-DD)
function getExistDate($date = null) {
    if (!$date) return null;
    $result = null;
    $date_time = strtotime($date);
    if ($date == date('Y-m-d', $date_time)) {
        $result = $date;
    } else {
        $result = date('Y-m-t', strtotime('-1month', $date_time));
    }
    return $result;
}

移動距離の度数を取得

指定された座標からの移動距離を度数にして返す関数。

参考:なんとなく始めてみた、プログラマー雑記 » データベース内の緯度・経度を利用して半径500m以内を検索する方法

// 1:緯度, 2:経度, 3:距離(メートル)
function getGeoMoveDistance($lat = 0, $lng = 0, $move = 100) {
    $earth_radius = 6356752.314; // 地球極半径
    $onedegree_second = 360 * 60 * 60; // 1秒
    $onesecond_degree = 1 / 60 / 60; // 1秒あたりの度数
    $lat_circle = $earth_radius * 2 * M_PI; // 円周(緯度)
    $lng_circle = $earth_radius * cos($lat / 180 * M_PI) * (2 * M_PI); // 円周(経度)
    return array(
        'latitude'=>$onesecond_degree * ($move / ($lat_circle / $onedegree_second)),
        'longitude'=>$onesecond_degree * ($move / ($lng_circle / $onedegree_second)),
    );
}
January 16th, 2014