PHP

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を返してくれますので。

PHP 文字列に特定の文字が含まれる場合に開始位置を取得するstrpos,mb_strposの使い方

文字列に特定の文字が含まれる場合に開始位置を取得する方法です。

strpos」「mb_strpos」を使用することで、文字列に特定の文字が含まれる場合に開始位置を取得することが出来ます。特定の文字が含まれていない場合はfalseを返します。
strpos」も「mb_strpos」も基本的に記述方法は同じですが「mb_strpos」は第四引数に文字コードを指定することが出来ます。

strpos(値, 含まれているか調べる文字, 何文字目からを対象とするか);
mb_strpos(値, 含まれているか調べる文字, 何文字目からを対象とするか, 文字コード);

第一、第二引数のみの場合

第一、第二引数のみの場合は、値の全ての文字を対象に、特定の文字が含まれているかを調べて、含まれていれば開始位置を返し、含まれていなければ「false」を返します。ちなみに第二引数は必須なので、指定しないとエラーになります。(指定しないとstrpos使う意味が無いですけど)

下記例では、変数xには「うえ」が含まれるので、0から数えて2文字目の「2」が変数yに代入され、「ウエ」は含まれていないのでfalseが変数zに代入されます。

<?
    $x = "あいうえお";
    $y = mb_strpos($x, "うえ"); // 0から数えるので、0,1,2,3,4 → あ,い,う,え,お 「うえ」が開始される 2 を返す
    $z = mb_strpos($x, "ウエ"); // 「ウエ」が含まれていないのでfalseを返す

    var_dump($y);
    echo "<br>\n";

    var_dump($z);
    echo "<br>\n";
?>

» 実行結果
 

第三引数を指定する場合

第三引数で、何文字目以降を調べるかの指定ができます。

下記例では、変数xの0から数えて3文字目の「え」以降には「お」が含まれているため「4」が変数yに代入され、変数xの0から数えて5文字目の「か」以降には「お」が含まれていないためfalseが変数zに代入されます。

<?php
    $x = "あいうえおかきくけこ";
    $y = mb_strpos($x, "お", 3); // 0から数えて3文字目の「え」以降に「お」が含まれているため、開始される 4 を返す
    $z = mb_strpos($x, "お", 5); // 0から数えて5文字目の「か」以降に「お」が含まれていないため、false を返す

    var_dump($y);
    echo "<br>\n";

    var_dump($z);
    echo "<br>\n";
?>

» 実行結果
 

最後に・・・

mb_srtposを使用する際、htmlの文字コードと値の文字コードが違う場合は、第四引数に「値の文字コード」を指定しましょう。表示する際は「mb_convert_encoding」等でエンコードして文字化けしないように気をつけましょう。

PHP 文字列の一部を置き換えるstr_replaceの使い方

文字列の一部を置き換える方法です。

str_replace」を使用することで、文字列の一部を置き換えることが出来ます。

str_replace(置き換えの対象になる文字, 置き換える文字, 値);

mb_strlen」や「mb_substr」の様に、マルチバイト文字用の「mb_str_replace」という関数は(今のところ?)ありませんので注意しましょう。

str_replace

「あいうえお」の「いうえ」をカタカナに置き換えてみます。

<?
    $x = "あいうえお";
    echo str_replace("いうえ", "イウエ", $x);
?>

» 実行結果
 

最後に・・・

簡単ですが、以上です。
何か実例を思いついたら追記しますm(__)m

超便利 !? ブラウザ上からHTMLを編集できる Sitecake

コリスさんで超便利なオープンソースが紹介されていました。
HTMLを直接ブラウザで更新・修正できてしまう簡易CMS「Sitecake」です。

普通のHTMLで作成したページの指定箇所のみをブラウザ上から更新・修正できるようにするシンプルなCMS -Sitecake

導入までをご紹介したいと思います。

特徴

すでにコリスさんで説明されていますが、HTML・PHPの知識が不要データベースが不要更新が簡単個人・商用利用可能といったメリットが盛り沢山のオープンソースです。

HTMLの編集可能にしたい箇所に「class=”sc-content”」を付与するだけで使用することができます。
編集可能な箇所を指定できるので、クライアントが毎月更新する部分だけに使用したり出来ますね。(余計な箇所を扱われる心配がないです)

環境

PHP5.4以上が必須です。
XAMPP、ロリポップでは問題なく動作しました。
VagrantとVirtualBoxで動かしているcentosで動作確認してみると「Class ‘DOMDocument’ not found」といったエラーが出て、色々調べましたが解決出来ませんでした。。。

ダウンロード・アップロード

sitecake_captcha
http://sitecake.com
上記「DOWNLOAD」から本体をダウンロードします。
「TRY DEMO」からデモ画面を操作することが出来ます。
「WATCH VIDEO」から動画で使い方を見ることが出来ます。(英語ですが見たらなんとなくわかると思います)

 
 

sitecake_GitHub_captcha
https://github.com/sitecake/sitecake
GitHub中段の「example template」からサンプルをダウンロードして、すぐに使ってみることが出来ます。

 
 

本体、サンプルの中身は下記のようになっていますので、全部まとめてサーバーのルートにアップロードします。

■ 本体
/sitecake
sitecake.php
■ サンプルデータ
/css
/img
/js
about-us.html
contact.html
index.html
portfolio.html

↓ ↓ ↓

■ サーバー
/css
/img
/js
/sitecake
about-us.html
contact.html
index.html
portfolio.html
sitecake.php

編集方法

アップロードしたsitecake.phpにアクセスします。

http://hoge.com/sitecake.php

sitecake_sample
パスワードを求められます。デフォルトは「admin」です。実際に使用する時は、/sitecake/credentials.php の

<?php $credentials = "d033e22ae348aeb5660fc2140aec35850c4da997"; ?>

を、書き換えましょう。SHA1で暗号化した文字列を入力する必要がありますので、「» http://www.sha1-online.com」等で変換しましょう。

 
 

sitecake_sample2

編集可能な部分にカーソルを近づけると枠が表示され、クリックすると編集が出来ます。

上部のツールバーから要素をドラッグ&ドロップすることで、新しく要素を追加することも可能です。

編集後はツールバーの「Publish」をクリックすると保存出来ます。

右上の「×」で編集画面からログアウトし、/index.html にリダイレクトされます。「変更されてないっ!?」と思った方(私)はおそらくキャッシュですので、安心してF5を押しましょう。

最後に・・・

画像、動画、GoogleMapを設置したり、リサイズしたり出来ますので、動画を見ながら色々扱ってみてください。

PHP 文字列の一部を取得するsubstr,mb_substrの使い方

文字列の一部を取得する方法です。

substr」「mb_substr」を使用することで、文字の一部を取得することが出来ます。
substr」も「mb_substr」も記述方法は同じです。

substr(値, 何文字目から取り出すか, 何文字取り出すか);
mb_substr(値, 何文字目から取り出すか, 何文字取り出すか);

日本語(マルチバイト文字)には「mb_substr」を使用しましょう。

第一、第二引数のみの場合

第一、第二引数のみの場合は、指定した文字以降を全て取り出します。0から数える点に注意して下さい。ちなみに第二引数は必須なので、指定しないとエラーになります。(指定しないとsubstr使う意味が無いですけど)

下記は変数xの0から数えて2文字目の c 以降を取得して表示する例です。取り出した後の変数xに変化はありません。

<?php
    $x = "abcdefg";
    echo substr($x, 2)."<br>"; // 0から数えるので 0,1,2 → a,b,c c以降の全てを表示 

    echo $x; // $xに変化はありません。
?>

» 実行結果
 

第三引数を指定する場合

第三引数で、何文字取り出すかを指定することが出来ます。

下記は変数xの0から数えて3文字目 d から2文字を取得して表示する例です。

<?php
    $x = "abcdefg";
    echo substr($x, 3, 2); // d から2文字 de を表示
?>

» 実行結果
 

後ろから取り出す場合

第二引数にマイナスの数値を指定することで、「後ろから何文字目」を指定できます。マイナスの場合は0からではなく、-1から数える事に注意して下さい。

<?php
    $x = "abcdefg";
    echo substr($x, -3, 2); // -1から数えるので -1,-2,-3 → g,f,e eから2文字 ef を取得して表示
?>

» 実行結果