2020年9月24日木曜日

文字列・配列をシャッフルするstr_shuffle・shuffle

こんばんは、こうちゃんです。

文字列の文字をランダムに替える関数、str_shuffleです。
そんなに用途はないですが、パスワード生成の際にランダム文字列を作る際などに使われるかと。

str_shuffle ( string $str ) : string
str_shuffle() は文字列をシャッフルします。 考えられるすべての順列のうちのひとつを作成します。

使用例:
<?php
$str = 'abcdef';
$shuffled = str_shuffle($str);

// bfdaec のような文字列を返します
echo $shuffled;
?>


配列を作ったあとに、事情により要素をランダムに変えたい場合などがあるかと思われます。
そんな時に役立つのがshuffleです。

shuffle ( array &$array ) : bool

この関数は、配列をシャッフル (要素の順番をランダムに) します。 この関数が使う疑似乱数生成器は、暗号学的な使い方には適していません。

使い方例
<?php
numbers = range(1, 20);
shuffle($numbers);
foreach ($numbers as $number) {
    echo "$number ";
}
?>

注意: この関数は、 array パラメータの要素に対して新しいキーを割り当てます。 その際、単純にキーを並べ替える代わりに、 すでに割り当てられている既存のキーを削除してしまいます。


さらにこのstr_shuffleを用いれば、
ある程度ランダム性のあるパスワードを生成することも。

echo substr(str_shuffle('1234567890abcdefghijklmnopqrstuvwxyz'), 0, $length);

このようにすると、$lengthに数字を送ると、その文字数のランダム文字列が出力されます。
この場合、この文字列の順番を変えるだけですので、
同じ文字は1度まで、最大でも36文字の文字列になります。
仮にパスワードとして使うと、脆弱過ぎるので、
簡易的なパスワードに用いる場合などに。

もう少し複雑にしたい場合、
str_shuffle の対象文字列を、
1234567890abcdefghijklmnopqrstuvwxyz の後ろに A~Z の大文字アルファベット26文字も入れれば、大文字も入り、少し複雑になります。
同じように、!"#$%&'()=- とかも入れれば記号も入り複雑になります。


こうちゃん

2020年1月9日木曜日

今日を表示するdate()関数・昨日の日付取得

こんばんは、こうちゃんです。

PHPにおける日時取得は、基本的にdate()関数ですべて済みます。

使い方が、
date('フォーマット')
となっており、このフォーマットの書き方で、日付や時刻など、何を取得するかを決められます。
使い方の詳細な説明は、公式サイトにて

date - PHP.net

紹介されておりますが、まずは実践編として、「今日」、を取得、表示したい場合の方法です。

パラメータ文字が、
Yで4桁の西暦
nが月(mにすると07のように0で埋めて2桁に)
jが日(dにすると07のように0で埋めて2桁に)
ですので、今日を取得する場合、
<?php
$date = date('Y/n/j');
?>
などとすれば、2020/1/9 といった本日の日付情報が取得できます。
これをサイト中に埋め込んだりすれば、例えば、

こんにちは、本日は <?php echo date('Y/n/j');?> です。

みたいに、サイト上部のあいさつに日付表示を入れたりすることもできます。

シンプルながらこんな使い方で日付を取得できます。
また、この日付の区切りの/は-に変えたり、
date('Y年n月j日');
として、2020年1月9日のように漢字交じりで表示することもできます。


また、これを使って、昨日、を取得する方法です。

今日、ならば、date('Y/n/j');というように、date()関数のみで表現できますが、
昨日を表す場合、タイムスタンプを引数に使い、
strtotime()関数を使います。

<?php
echo date('Y-m-d', strtotime('-1 day'));
?>

とすれば、本日から、-1day、つまり、昨日、が取得できます。


こうちゃん