カテゴリー
SugiBlog Webデザイナー・プログラマーのためのお役立ちTips

割り算した余りを求める [PHP]

除算(割り算)した剰余(じょうよ:余り)を求めるには以下のようにします。

$surplus = 1564 % 1000;
echo $surplus;

出力結果

564

他の言語でも、同様の演算子があるかと思います。
例えばVBなら「mod」です。

しかし、引数が整数型(Integer)ではない場合、意図しない結果が返ってくることがあります。

$surplus = (65.1 * 1000) % 1000;
echo $surplus;

続きを読む…»

10,183 views

配列の共通項を計算する – array_intersect [PHP]

複数の配列から共通するキーや値を検索する関数をご紹介。

配列の共通項を計算する – array_intersect

書式

array array_intersect ( array $array1 , array $array2 [, array $ ... ] )

配列の共通する値のキーと値が配列で返されます。
キーと値の関係は、もとの配列の組み合わせが維持されます。

パラメータ

array1 //値を調べるもとの配列
array2 //値を比較する対象とする配列
array  //さらに比較するそれ以外の配列

返り値
array1 の値のうち、 すべての引数に存在する値のものを含む連想配列を返します。

例)

<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);
?>

出力結果

Array
(
    [a] => green
    [0] => red
)

キーを基準にして配列の共通項を計算する – array_intersect_key
続きを読む…»

2,050 views

かなり便利 – PHPで祝日を求める

かなり便利なので、以前から使わせていただいています。
isHoliday($year, $month, $day)だけで祝日かどうかがわかります。
他にもgetWeeksOfMonthという関数で、ある月の第n曜日の日付の取得もできます。

PHPで祝日を求める – ぱぷぅ家のホームページ
http://www.pahoo.org/e-soul/webtech/php02/php02-27-01.shtm

2016.07.05
2016年より施行された「山の日」にも対応されています。

六曜を取得する – 2018.01.18追記

先ほどとはまた別で公開されているプログラムを使って六曜も取得できます。

PHPで3ヶ月カレンダーを作る – ぱぷぅ家のホームページ
https://www.pahoo.org/e-soul/webtech/php02/php02-45-01.shtm

ダウンロードした中の「pahooCalendar.php」を読み込み、
以下のようなコードで六曜が取得できます。

// 六曜取得の設定
$pCalendar = new pahooCalendar();
$pCalendar->setLanguage('jp');
$pCalendar->makeLunarCalendar($year);

// 旧暦の取得
list($qmonth, $qday, $qq) = $pCalendar->Gregorian2Lunar($year, $month, $day);

$rokuyo = $pCalendar->rokuyou($qmonth, $qday);

echo $rokuyo;

通常は上記の方法で取得できるのですが、2018年の1~16日が
取得できなかったので、少し手を加えました。

取得できなかったのは旧暦が負の日付になることが原因でした。
例えば「1/1」だと「12/-15」となる。
「12/-15」とは、12月の0日(ゼロ日)よりも15日前ということになるよう。
つまり、12月1日よりも15日+1日前の日付を出せば良い、ということになります。
それを踏まえたのが以下のコードになります。

list($qmonth, $qday, $qq) = $pCalendar->Gregorian2Lunar($year, $month, $day);

if($qmonth > 0 && $qday > 0) {

    $rokuyo = $pCalendar->rokuyou($qmonth, $qday);

    echo $rokuyo;

} else {

    // 旧暦の日付が負だった場合の処理

    // まず1日の日付オブジェクトを作成
    $qdate = new DateTime("$year-$qmonth-01");

    // 負の日数+1日の分だけ日付を遡る
    $qdate->sub(new DateInterval("P".abs($qday - 1)."D"));

    // 遡った日付で六曜を取得
    $rokuyo = $pCalendar->rokuyou($qdate->format("n"), $qdate->format("j"));

    echo $rokuyo;

}
7,951 views

年齢を自動的に表示する – PHP

プログラムで常に現在の年齢を表示するには

<?php
    print "age:".floor((date("Ymd") - "19940619") / 10000);
?>

結果

age:18
1,992 views

PHP メモリーエラー

PHPでファイルを扱う中で、以下のようなエラーが発生することがあります。

Fatal error: Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes) in ...

ファイルの容量が大き過ぎて、PHPに割り当てられているメモリーの範囲を超えてしまっているのです。

php.iniに以下のような行がありますので、この値を変更してあげます。
デフォルトは8Mです。

memory_limit = 8M   ; Maximum amount of memory a script may consume (8MB)

おすすめはしませんが、-1とすると上限なしに設定できるようです。
変更したらapacheを再起動させてください。

php.iniが触れない場合や、基本的な上限は変えたくないときは一時的に変更します。

init_set("memory_limit", "16M");

もしくは.htaccessでも可能です。

php_value memory_limit 16M

以下の記事も参考にしてください
[ファイルアップロードの最大サイズを変更]

1,372 views