カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

配列をランダムに並べ替える

PHPではshuffle関数を使って、配列の値をランダムに並べ替えることができます。

例として1から15の配列を作成し、配列の要素数だけ繰り返しランダムに並べ替えたものを表示しています。

<?php

$num_list = range(1, 15);

$n = count($num_list);

for($i = 0; $i < $n; $i++) {
    shuffle($num_list);
    echo @implode(", ", $num_list)."<br>";
}

?>

実行した結果がこちら
random_array

1,079 views

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

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

$surplus = 1564 % 1000;
echo $surplus;

出力結果

564

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

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

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

続きを読む…»

10,289 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,164 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;

}
8,170 views

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

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

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

結果

age:18
2,094 views