【情報整理④】PHPの頻出関数を整理して、画面遷移過多による眼病を予防 ~ 文字列・数値編 ~


  • Netflixによって世界中から人気を博している「こんまり」さんに、多大な影響を受けて情報整理をしていく記事第四弾。

  • 本来の「世界的潮流に乗っかって、几帳面技術者を堂々宣伝する」という見掛け倒し目的のこの記事が、「角膜損傷を防ぐための健康活動」という老化防止目的の記事へと大幅転換を図る、二十代前半執筆者。

  • 忘却癖が只者ではない私は、「検索・記録・復習」をしても、見事に消滅する滑稽な頭脳のため、常に画面は自分と見事に比例した「不安定な落ち着きの無さ」を発揮。

  • 今回は、PHPの頻出関数の「文字列・数値」を整理していくことにしよう。


PHP頻出関数


文字列,数値


printf(), sprintf()

<?php

// printf(フォーマット文字列,値,値);

printf('今日は%d月%d日です。',date('m'),date('d'));

// 実行結果
// 今日は3月2日です。

<?php

// sprintf(フォーマット文字列,値,値);

$number = sprintf('%04d',30);
echo $number;

// 実行結果
// 0030


preg_match(),preg_match_all()


  • 正規表現による一致・検索。


  • パターンに一致すれば「1」、一致しなければ「2」を返す。


  • preg_match_all() は一致したすべての値を変数に格納。


  • 公式マニュアル


  • 公式マニュアル


<?php

// 返り値 = preg_match(/正規表現パターン/,検索対象の文字列,[配列],[動作フラグ],[検索開始位置])

if (preg_match('/経済/', '世界経済情勢')) {
echo 'ある';
} else {
echo 'ない';
}

// 実行結果
// ある

<?php

// 「PREG_OFFSET_CAPTURE」を指定して、一致文字列の登場位置(オフセット)をバイト数で取得
// ※半角は1バイト、全角は2バイト

if (preg_match('/経済/', '世界経済情勢',$data,PREG_OFFSET_CAPTURE)) {
echo "ある\n";
} else {
echo "ない";
}
print_r($data)

// 実行結果

/*
ある
Array
(
[0] => Array
(
[0] => 経済
[1] => 6
)

)
*/

<?php

// 「PREG_OFFSET_CAPTURE」を指定して、一致文字列の登場位置(オフセット)をバイト数で取得

if (preg_match_all('/経済/', '世界経済情勢における、日本の経済状況を、日本経済大学教授の経済学者が解説。',$data,PREG_OFFSET_CAPTURE)) {
echo 'ある';
} else {
echo 'ない';
}
print_r($data)

// 実行結果

/*
ある
Array
(
[0] => Array
(
[0] => Array
(
[0] => 経済
[1] => 6
)

[1] => Array
(
[0] => 経済
[1] => 42
)

[2] => Array
(
[0] => 経済
[1] => 66
)

[3] => Array
(
[0] => 経済
[1] => 87
)

)

)
*/


preg_replace()


  • 正規表現によるパターンに一致した、検索または置換を行う。


  • 公式マニュアル


// preg_replace(正規表現パターン ,置換後文字列 ,置換対象文字列)

$names = '佐藤 田中 鈴木 佐藤';
$names_grep = preg_replace('/(佐藤)/', '上野', $names);
echo $names_grep;

// 実行結果

// 上野 田中 鈴木 上野


preg_quote()


  • 正規表現特殊文字の前にバックスラッシュをつけてエスケープする。


  • オプション区切り文字は省略可能。「/」が一般的に使用されている。


  • 公式マニュアル


// preg_quote(文字列,オプション区切り文字)

$keywords = '$URL : /で始まる。';
$keywords = preg_quote($keywords, '/');
echo $keywords;

// 実行結果

// \$URL \: \/で始まる。


str_replace(), strtr()

// str_replace(検索文字列 ,置換後文字列 ,検索対象文字列,置換した回数)

$names = ['佐藤', '高橋', '鈴木', '高橋', '中村'];
$replace = str_replace('高橋', '小松', $names, $count);
print_r($replace);
echo '置換した回数: '.$count;

// 実行結果

/*
Array
(
[0] => 佐藤
[1] => 小松
[2] => 鈴木
[3] => 小松
[4] => 中村
)
置換回数: 2
*/

// strtr(置換対象文字列, 文字列(配列))

$array = array("佐藤"=>"鈴木","田中"=>"田丸","高橋"=>"高峰");
print strtr("佐藤 田中 大川 大橋 高橋", $array);

// 実行結果

// 鈴木 田丸 大川 大橋 高峰


substr(), mb_substr()

// substr (文字列, 開始位置 ) 

echo substr('America', 1);
echo mb_substr('あいうえおかきくけこ', 3);

// 実行結果

// merica
// かきくけこ


strtolower(), strtoupper()

// strtolower(対象文字列)

$name = "JOHN,Bob,michaEl";
$result = strtolower($name);
echo $result;

// 実行結果

// john,bob,michael

// strtoupper(対象文字列)

$name = "JOhN,Bob,michaEl";
$result = strtoupper($name);
echo $result;

// 実行結果

// JOHN,BOB,MICHAEL


strlen(), mb_strlen()

// strlen(対象文字列)

$name = 'Michael';
echo strlen($message);

// 実行結果

// 7

// mb_strlen(対象文字列)

$message = '私は男です';
echo mb_strlen($message);

// 実行結果

// 5


strpos(), mb_strpos()

// strpos(検索対象文字列,指定文字列)

$name = 'michael';
$findword = 'a';
$result = strpos($name, $findword);

if ($result === false) {
echo "'$findword' は、'$name' の中で見つかりませんでした";
} else {
echo "'$findword' が、'$name' の中で見つかりました\n";
echo "位置 : $result";
}

// 実行結果

/*
'a' が、'michael' の中で見つかりました
位置 : 4
*/


mb_convert_encoding()

// mb_convert_encoding(対象文字列,変換文字コード,対象文字コード)

/* 内部文字エンコーディングからSJISへの変換 */
$name = mb_convert_encoding($name, "SJIS");

/* SJISからUTF-8に変換 */
$name = mb_convert_encoding($name, "UTF-8", "SJIS");

/* "auto" 指定で、"ASCII,JIS,UTF-8,EUC-JP,SJIS" に展開 */
$name = mb_convert_encoding($name, "EUC-JP", "auto");


mb_convert_kana()


  • ひらがな・カタカナ、全角・半角を相互に変換する。


  • 下記、オプション。


オプション
意味

r
「全角」英字を「半角」に変換

R
「半角」英字を「全角」に変換

n
「全角」数字を「半角」に変換

N
「半角」数字を「全角」に変換

a
「全角」英数字を「半角」に変換

A
「半角」英数字を「全角」に変換

s
「全角」スペースを「半角」に変換

S
「半角」スペースを「全角」に変換

k
「全角カタカナ」を「半角カタカナ」に変換

K
「半角カタカナ」を「全角カタカナ」に変換

h
「全角ひらがな」を「半角カタカナ」に変換

H
「半角カタカナ」を「全角ひらがな」に変換

c
「全角カタカナ」を「全角ひらがな」に変換

C
「全角ひらがな」を「全角カタカナ」に変換

V
濁点付きの文字を一文字に変換

// mb_convert_kana(対象文字列,オプション)

/* 「半角カタカナ」を「全角カタカナ」に変換し、「全角」英数字を「半角」に変換。 */
$str = mb_convert_kana($str, "KVa");


trim(), ltrim(), rtrim()

// trim(対象文字列)

// rtrim(対象文字列)
// ltrim(対象文字列)

$name = ' satou ';
$job = ' engineer ';
$origin = ' japan ';

$new_name = trim($name);
$new_job = ltrim($job);
$new_origin = rtrim($origin);

var_dump($new_name);
var_dump($new_job);
var_dump($new_origin);

// 実行結果

/*
string(5) "satou"
string(9) "engineer "
string(6) " japan"
*/


mt_rand()


  • 指定された範囲でランダムな数値を返す。


  • rand()より高精度。


  • 公式マニュアル


// mt_rand(最小値,最大値)

// オプション指定なし。
echo mt_rand() . "\n";
// オプション指定あり。
echo mt_rand(10,20);

// 実行結果

/*
1458218741
13
*/


is_string()

// is_string(変数)

$name="佐藤";
if(is_string($name)){
echo '文字列です。';
}else{
echo '文字列ではありません。';
}

// 実行結果

// 文字列です。


is_int()

// is_int(対象変数)

$number=78.00;
if (is_int($number)) {
echo '整数型です。';
}else {
echo '整数型ではありません。';
}

// 実行結果

// 整数型ではありません。


is_float()


  • 与えられた値が float型(少数) であるかを返す。


  • is_double()も存在はするが、is_flostと同様。


  • 公式マニュアル


// is_float(対象変数)

$number=78.00;
if (is_float($number)) {
echo '浮動小数型です。';
}else {
echo '浮動小数型ではありません。';
}

// 実行結果

// 浮動小数型です。


is_numeric()


  • 与えられた値が数字として扱えるかを返す。文字列でも良い。


  • 公式マニュアル


// is_numeric(対象変数)

$str_number = '10';
$int_number = 10;

if(is_numeric($str_number)){
echo 'これは数値として扱える。';
}else{
echo '駄目です。';
}

// 実行結果

// これは数値として扱える。


round()


  • 小数部分を四捨五入して整形。


  • 桁数指定で、変更できる。


  • 第三引数での「オプションモード」を指定できる。


  • 下記、オプションモード


定数
意味

PHP_ROUND_HALF_UP
小数点を指定桁数に、0から離れる方向に整形

PHP_ROUND_HALF_DOWN
小数点を指定桁数に、0に近づく方向に整形

PHP_ROUND_HALF_EVEN
小数点を指定桁数に、次の偶数に整形

PHP_ROUND_HALF_ODD
小数点を指定桁数に、次の奇数に整形

// round(値,桁数,オプションモード)

// 通常指定
echo round(34.5) . "\n";
// 桁数指定
echo round(5.5555, 2) . "\n";
echo round(123456789, -3);
// モード指定
echo round(-1.55, 1, PHP_ROUND_HALF_UP) . "\n";
echo round(-1.55, 1, PHP_ROUND_HALF_DOWN) . "\n";
echo round(-1.55, 1, PHP_ROUND_HALF_EVEN) . "\n";
echo round(-1.55, 1, PHP_ROUND_HALF_ODD);

// 実行結果

/*
35
5.56
123457000
-1.6
-1.5
-1.6
-1.5
*/


floor()


  • 小数部分を、小数点以下切り捨てして整形。


  • ※値が小さい方へ小数点以下を切り捨てるため、マイナスの場合は注意


  • 公式マニュアル


// floor(値)

echo floor(3.14) . "\n";
echo floor(-3.14);

// 実行結果

/*
3
-4
*/


ceil()

// ceil(値)

echo ceil(3.14) . "\n";
echo ceil(-3.14);

// 実行結果

/*
4
-3
*/


まとめ


  • 今回は、PHP関数メモの第一回目ということで、眼病予防という崇高な目的で始まったはずが、おびただしい量による検索のため、自己傷害を加速させながら記事を書く。

  • 「この作業が完了したら、遷移激減を達成でき、やつれ目の卒業ができる」という考えを、同時に発生する整理のための検索によって、予防効果を帳消しにすることから逃避して、楽しい余生の妄想にはげむ。

  • 異常な長持ち性のため、今後も多くの情報を整理していくため、眼病予防は別の代替案を模索することにしよう。


参考