文字列を配列化する
str_splitで文字列を配列化できる。
ただし、日本語など2バイト文字コードには対応していない。
ソースコード
$str = "Hello world!";
$ary = str_split($str);
var_dump($ary);
出力
array (size=12)
0 => string 'H' (length=1)
1 => string 'e' (length=1)
2 => string 'l' (length=1)
3 => string 'l' (length=1)
4 => string 'o' (length=1)
5 => string ' ' (length=1)
6 => string 'w' (length=1)
7 => string 'o' (length=1)
8 => string 'r' (length=1)
9 => string 'l' (length=1)
10 => string 'd' (length=1)
11 => string '!' (length=1)
日本語文字列を配列化する
日本語など2バイト文字コードの文字列を配列化することができる。
ソースコード
$str = "あなた自身の水溜めから水を,あなた自身の井戸から水の滴りを飲め";
$ary = preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
var_dump($ary);
出力
array (size=31)
0 => string 'あ' (length=3)
1 => string 'な' (length=3)
2 => string 'た' (length=3)
3 => string '自' (length=3)
4 => string '身' (length=3)
5 => string 'の' (length=3)
6 => string '水' (length=3)
7 => string '溜' (length=3)
8 => string 'め' (length=3)
9 => string 'か' (length=3)
10 => string 'ら' (length=3)
11 => string '水' (length=3)
12 => string 'を' (length=3)
13 => string ',' (length=3)
14 => string 'あ' (length=3)
15 => string 'な' (length=3)
16 => string 'た' (length=3)
17 => string '自' (length=3)
18 => string '身' (length=3)
19 => string 'の' (length=3)
20 => string '井' (length=3)
21 => string '戸' (length=3)
22 => string 'か' (length=3)
23 => string 'ら' (length=3)
24 => string '水' (length=3)
25 => string 'の' (length=3)
26 => string '滴' (length=3)
27 => string 'り' (length=3)
28 => string 'を' (length=3)
29 => string '飲' (length=3)
30 => string 'め' (length=3)
文字列中で仕様している文字を重複なしで列挙する
ソースコード
$str = "あなた自身の水溜めから水を,あなた自身の井戸から水の滴りを飲め";
$ary = preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
$ary=array_unique($ary);// 配列から重複値を除去する
sort($ary); // 配列をソートする
var_dump($ary);
出力
array (size=18)
0 => string 'あ' (length=3)
1 => string 'か' (length=3)
2 => string 'た' (length=3)
3 => string 'な' (length=3)
4 => string 'の' (length=3)
5 => string 'め' (length=3)
6 => string 'ら' (length=3)
7 => string 'り' (length=3)
8 => string 'を' (length=3)
9 => string '井' (length=3)
10 => string '戸' (length=3)
11 => string '水' (length=3)
12 => string '溜' (length=3)
13 => string '滴' (length=3)
14 => string '自' (length=3)
15 => string '身' (length=3)
16 => string '飲' (length=3)
17 => string ',' (length=3)
文字列を小文字化する | strtolower,mb_strtolower
英語のアルファベットだけなら「strtolower」関数だけで十分である。
「mb_strtolower」関数を使うと、多言語のアルファベットにも対応する。
日本語は大文字、小文字の概念がないので無関係。
echo strtolower("ABCDE"); | abcde |
echo strtolower("あいうABCあ"); | あいうabcあ |
echo strtolower("Τάχιστη"); | Τάχιστη |
echo mb_strtolower("ABCDE"); | abcde |
echo mb_strtolower("あいうABCあ"); | あいうabcあ |
echo mb_strtolower("Τάχιστη"); | τάχιστη |
echo strtolower(\"ABCDE\"); | {$str} | \n";
// $str = strtolower("あいうABCあ");
// echo "echo strtolower(\"あいうABCあ\"); | {$str} |
\n";
// $str = strtolower("Τάχιστη");
// echo "echo strtolower(\"Τάχιστη\"); | {$str} |
\n";
// $str = mb_strtolower("ABCDE");
// echo "echo mb_strtolower(\"ABCDE\"); | {$str} |
\n";
// $str = mb_strtolower("あいうABCあ");
// echo "echo mb_strtolower(\"あいうABCあ\"); | {$str} |
\n";
// $str = mb_strtolower("Τάχιστη");
// echo "echo mb_strtolower(\"Τάχιστη\"); | {$str} |
\n";
?>
文字列を大文字化する | strtoupper,mb_strtoupper
英語のアルファベットだけなら「strtoupper」関数だけで十分である。
「mb_strtoupper」関数を使うと、多言語のアルファベットにも対応する。
日本語は大文字、大文字の概念がないので無関係。
echo strtoupper("abcd"); | ABCD |
echo strtoupper("あいうabcあ"); | あいうABCあ |
echo strtoupper("τάχιστη"); | τάχιστη |
echo mb_strtoupper("abcd"); | ABCD |
echo mb_strtoupper("あいうabcあ"); | あいうABCあ |
echo mb_strtoupper("τάχιστη"); | ΤΆΧΙΣΤΗ |
echo strtoupper(\"abcd\"); | {$str} | \n";
// $str = strtoupper("あいうabcあ");
// echo "echo strtoupper(\"あいうabcあ\"); | {$str} |
\n";
// $str = strtoupper("τάχιστη");
// echo "echo strtoupper(\"τάχιστη\"); | {$str} |
\n";
// $str = mb_strtoupper("abcd");
// echo "echo mb_strtoupper(\"abcd\"); | {$str} |
\n";
// $str = mb_strtoupper("あいうabcあ");
// echo "echo mb_strtoupper(\"あいうabcあ\"); | {$str} |
\n";
// $str = mb_strtoupper("τάχιστη");
// echo "echo mb_strtoupper(\"τάχιστη\"); | {$str} |
\n";
?>
文字列の両端からダブルクォートなどを除去する
$str1 = trim($str,'"');
※ 数値やnullであっても文字列型に変換されるので注意
検証
$xData = array('',null,'タヌキ','"トカゲ"','"プレコ','マダコ"',123,0);
foreach($xData as $str){
$str1 = trim($str,'"');
var_dump($str1);
}
出力
string '' (length=0)
string '' (length=0)
string 'タヌキ' (length=9)
string 'トカゲ' (length=9)
string 'プレコ' (length=9)
string 'マダコ' (length=9)
string '123' (length=3)
string '0' (length=1)
文字列の先頭または末尾から指定文字を除去する
先頭文字が「a」なら除去する
$str = 'aトカゲa';
$str= ltrim($str,'a');
var_dump($str); // → トカゲa
末尾文字が「a」なら除去する
$str = 'aトカゲa';
$str= rtrim($str,'a');
var_dump($str); // → aトカゲ
両側が「a」なら除去する
$str = 'aトカゲa';
$str= trim($str,'a');
var_dump($str); // → トカゲ
文字列をShift-JISからUTF8に変換する | mb_convert_encoding
$text = mb_convert_encoding($text , 'SJIS' , 'UTF-8');
データ配列内の値をまとめてShift-JISからUTF8に変換する | mb_convert_variables
mb_convert_variables('UTF-8' , 'SJIS' , $arr);
検索する文字を含む行を取得する
<?php
$text = "猫いろはにほへと\nちりノライヌぬるを\n馬わかよたれそつねならむ馬\nうゐのおく馬やまけふこえて\nあさきゆめみしゑひもせすん牛";
$data = array('猫','ノライヌ','馬','牛','UMA');
echo '<pre>' . $text . '</pre>';
echo '<p>出力</p>';
echo "<table class='tbl2'><thead><tr><th>検索文字</th><th>offset(先頭)</th><th>offset(末尾)</th><th>取得行</th></tr></thead><tbody>";
foreach($data as $str){
$info = getRowContainSearchStr($str,$text);
$offset1 = $info['offset1'];
$offset2 = $info['offset2'];
$row_str = $info['row_str'];
echo "<tr><td>{$str}</td><td>{$offset1}</td><td>{$offset2}</td><td>{$row_str}</td></tr>";
}
echo "</tbody></table>";
/**
* 検索する文字を含む行を取得する
*
* @note
* 検索する文字を含む改行コードにはさまれた文字列を取得する
*
* @param string $search 検索文字
* @param string $subject 対象文字列
* @param int $offset 検索開始位置
* @param int $mode モード 0:行文字列のみ取得 , 1:行文字列や位置情報も取得する
* @param string $nl_code 改行コード
* @return string 検索文字を含む行
*/
function getRowContainSearchStr($search,$subject,$offset=0,$mode=0,$nl_code="\n"){
$len = mb_strlen($subject);
$a1 = mb_strpos($subject,$search,$offset);
if($a1 === false){
return array(
'offset1' => null,
'offset2' => null,
'row_str' => null,
);
}
$offset2 = mb_strpos($subject,$nl_code,$a1);
if($offset2 === false) $offset2 = $len;
$a2 = $offset2 - $len -1;
$offset1 = mb_strripos($subject,$nl_code,$a2);
if($offset1 === false) $offset1 = 0;
$row_str = mb_substr($subject,$offset1,$offset2 - $offset1);
return array(
'offset1' => $offset1,
'offset2' => $offset2,
'row_str' => $row_str,
);
}
?>
出力
検索文字 | offset(先頭) | offset(末尾) | 取得行 |
---|
猫 | 0 | 8 | 猫いろはにほへと |
ノライヌ | 8 | 18 |
ちりノライヌぬるを |
馬 | 18 | 32 |
馬わかよたれそつねならむ馬 |
牛 | 46 | 61 |
あさきゆめみしゑひもせすん牛 |
UMA | | | |
- ホーム
- プログラミングの覚書
- PHPの覚書
- PHPの覚書:文字列操作