Tips

PHP range,shuffle,array_sliceを使用して特定の範囲の数値からランダムにいくつか取り出して配列を作る方法

特定の範囲の数値からランダムにいくつか取り出して配列を作る方法です。

range」「shuffle」「array_slice」を使用して下記のように記述することで特定の範囲(サンプルは1~100)の数値からランダムにいくつか(サンプルは5つ)取り出して配列にすることが出来ます。

<?php
    $i = range(1,100);
    shuffle($i);
    $array = array_slice($i, 0, 5);

    var_dump($array);
?>

» 実行結果
リロードすると数値が変わります。

range

「range」は第一引数から第二引数の範囲の配列を作成します。第三引数を指定しない場合は1ずつ、第三引数を指定すると、指定した間隔で配列を作成します。

<?php
    $x = range(0, 10); // 0~10の配列を作成します
    $y = range(0, 100, 10); // 0~100を10ずつに区切って10,20,30…100の配列を作成します

    var_dump($x);
    echo "<br>";
    var_dump($y);
?>

» 実行結果
 

「range」は英字にも使えます。

<?php
    $x = range("a", "d");

    var_dump($x);
?>

» 実行結果

shuffle

「shuffle」は配列の順番をランダムに変更します。

<?php
    $x = range(1, 10); // 1~10の配列を作成
    shuffle($x); // 配列をランダムに並び替え
    
    var_dump($x);
?>

» 実行結果
リロードすると順番がランダムに変わります。

array_slice

「array_slice」は第一引数の配列から、第二引数を開始位置として、第三引数の数値分の配列を返します。

<?php
    $i = range(1,100); // 1~100の配列を作成
    shuffle($i); // 配列をランダムに並び替え
    $array = array_slice($i, 0, 5); // ランダムに並び替えられた配列の0番めから5つを$arrayに代入

    var_dump($array);
?>

» 実行結果
リロードすると数値が変わります。

PHP strposを使用して文字列に特定の文字が含まれているか判定する方法

if」と「strpos」を使用して文字列に特定の文字が含まれているか判定する方法です。

strpos」は特定の文字列が含まれていない場合にfalseを返しますので、下記のようにすると文字列が含まれている場合や含まれていない場合に処理を行うということができます。

含まれている場合に処理を行う

下記は、変数xに「いうえ」が含まれている場合に「含まれています」を表示する例です。

<?php
    $x = "あいうえお";
    if(strpos($x, "いうえ") !== false){
        echo "含まれています";
    }
?>

» 実行結果

変数xに「いうえ」が含まれているので、strpos($x, “いうえ”)の結果はfalseではなく、数値が返ってきます。「!==」を使用して、falseでなければ処理を実行する、つまり特定の文字が含まれていれば実行する形になっています。
重要なのは厳密に判定するために「!==」を使用していることです。「!=」だと、strposの結果が0だった(0文字目から含まれている)場合にfalseと判定されるため、誤った結果となってしまいます。

下記は、「!=」を使用してしまい、誤った結果が返ってきてしまう例です。変数xには「あいう」がふくまれているのに「含まれています」が表示されません。

<?php
    $x = "あいうえお";
    if(strpos($x, "あいう") != false){
        echo "含まれています";
    }
?>

» 実行結果

含まれていない場合に処理を行う

下記は、変数xに「イウエ」が含まれていない場合に「含まれていません」を表示する例です。

<?php
    $x = "あいうえお";
    if(strpos($x, "イウエ") === false){
        echo "含まれていません";
    }
?>

» 実行結果

「含まれている場合」と同じく厳密に判定するために「===」を使用します。

両方の処理を行う

else を使用するだけですね。
関数にしてみます。

<?php
    function jud($x, $y){
        if(strpos($x, $y) !== false){
            echo "含まれています<br>";
        }else{
            echo "含まれていません<br>";
        }
    }
    
    $x = "あいうえお";
    $y = "いうえ";
    jud($x, $y);

    $x = "あいうえお";
    $y = "イウエ";
    jud($x, $y);
?>

» 実行結果

関数がよくわからなかった方は「関数の作り方」の記事をご覧ください。

最後に・・・

判定に使用するためであれば、日本語であっても「mb_strpos」を使用する必要はありません。strposで大丈夫です。日本語でも「含まれていない場合」にちゃんとfalseを返してくれますので。

Translate »