<?php
$data = array(
'abcde',
'abc1',
'abc12',
'abc1234',
'あいう1234',
'あいう8765neko5678x',
'abc1234def',
'1234def',
'abc123456789',
'',
);
echo '<p>出力</p>';
echo "<table class='tbl2'><thead><tr><th>対象文字列</th><th>抽出した数字列</th></tr></thead><tbody>";
foreach($data as $str){
$nums = extractNumber($str);
$num_str='';
foreach($nums as $num) $num_str .= $num . '<br>';
echo "<tr><td>{$str}</td><td>{$num_str}</td></tr>";
}
echo "</tbody></table>";
/**
* 文字列から連続する数字列を抽出する
*
* @note
* マッチする数字列すべてを数字列リスト(配列)で返す。
* マッチする数字列が存在しない場合、空配列を返す。
*
* @param string $str 対象文字列
* @param number $min_digit 最小桁数
* @param number $max_digit 最大桁数
* @return array 数字列リスト
*/
function extractNumber($subject,$min_digit=2,$max_digit=8){
$pattern = '/\d{' . $min_digit . ',' . $max_digit . '}/';
preg_match_all ($pattern, $subject, $matches);
if(!empty($matches)){
return $matches[0];
}else{
return array();
}
}
?>
出力
対象文字列 | 抽出した数字列 |
---|---|
abcde | |
abc1 | |
abc12 | 12 |
abc1234 | 1234 |
あいう1234 | 1234 |
あいう8765neko5678x | 8765 5678 |
abc1234def | 1234 |
1234def | 1234 |
abc123456789 | 12345678 |
<?php
$str = "赤いたぬきです。";
$str1 = mb_substr_replace($str, 'ネコ', 2,3);
echo $str . '<br>';
echo $str1 . '<br>';
/**
* @param mixed $string The input string.
* @param mixed $replacement The replacement string.
* @param mixed $start If start is positive, the replacing will begin at the start'th offset into string. If start is negative, the replacing will begin at the start'th character from the end of string.
* @param mixed $length If given and is positive, it represents the length of the portion of string which is to be replaced. If it is negative, it represents the number of characters from the end of string at which to stop replacing. If it is not given, then it will default to strlen( string ); i.e. end the replacing at the end of string. Of course, if length is zero then this function will have the effect of inserting replacement into string at the given start offset.
* @return string The result string is returned. If string is an array then array is returned.
*/
function mb_substr_replace($string, $replacement, $start, $length=NULL) {
if (is_array($string)) {
$num = count($string);
// $replacement
$replacement = is_array($replacement) ? array_slice($replacement, 0, $num) : array_pad(array($replacement), $num, $replacement);
// $start
if (is_array($start)) {
$start = array_slice($start, 0, $num);
foreach ($start as $key => $value)
$start[$key] = is_int($value) ? $value : 0;
}
else {
$start = array_pad(array($start), $num, $start);
}
// $length
if (!isset($length)) {
$length = array_fill(0, $num, 0);
}
elseif (is_array($length)) {
$length = array_slice($length, 0, $num);
foreach ($length as $key => $value)
$length[$key] = isset($value) ? (is_int($value) ? $value : $num) : 0;
}
else {
$length = array_pad(array($length), $num, $length);
}
// Recursive call
return array_map(__FUNCTION__, $string, $replacement, $start, $length);
}
preg_match_all('/./us', (string)$string, $smatches);
preg_match_all('/./us', (string)$replacement, $rmatches);
if ($length === NULL) $length = mb_strlen($string);
array_splice($smatches[0], $start, $length, $rmatches[0]);
return join($smatches[0]);
}
?>
<table class="tbl2"><thead><tr><th>検証文字</th><th>バイト数</th></tr></thead><tbody> <?php $data = array(1,'a','+','あ','漢','123','漢字','大猫12','Σ','ব','বিড়াল'); foreach($data as $str1){ $byte = strlen($str1); echo "<tr><td>{$str1}</td><td>{$byte}</td></tr>"; } ?> </tbody></table>
検証文字 | バイト数 |
---|---|
1 | 1 |
a | 1 |
+ | 1 |
あ | 3 |
漢 | 3 |
123 | 3 |
漢字 | 6 |
大猫12 | 8 |
Σ | 2 |
ব | 3 |
বিড়াল | 18 |
<?php
$subject = "ネコが家でカツオブシを食べる";
echo $subject . '<br>';
$search = ['ネコ','家','カツオブシ'];
$replace = ['イヌ','庭','残飯'];
$subject = str_replace($search, $replace, $subject);
echo $subject . '<br>';
?>
出力
ネコが家でカツオブシを食べる イヌが庭で残飯を食べる
<?php $subject = "ネコが家でカツオブシを食べる"; echo $subject . '<br>'; $search = ['ネコ','XXX','カツオブシ']; $replace = ['イヌ','庭','残飯']; $subject = str_replace($search, $replace, $subject); echo $subject . '<br>'; ?>出力
ネコが家でカツオブシを食べる イヌが家で残飯を食べる対象の要素だけ置換されない。
$post_no = 1234567;
var_dump($post_no);
$post_no = convPostNo($post_no);
var_dump($post_no);
/**
* 郵便番号変換 123-4567形式にする
* @param int $post_no 数字羅列の郵便番号
* @return string 変換後の郵便番号
*/
function convPostNo($post_no){
$post_no_str = $post_no . ''; // 文字列にキャストする
$post_no_str = trim($post_no_str);
if(strlen($post_no_str) != 7) return $post_no_str;
$str1 = substr($post_no_str, 0,3); // 先頭の3文字を取得
$str2 = substr($post_no_str,-4); // 末尾の4文字を取得
$post_no_str = $str1 . '-' . $str2;
return $post_no_str;
}
/**
* 億万円表記 例 150000000 → 1億5000万
* @param int $value 数値
* @return string 億万円表記
*/
function convOkuman($value){
$unitList = array('','万', '億', '兆', '京', );
// 4桁リストの作成
$int_str = $value . ''; // 整数部分
$rev_str = strrev($int_str);
$keta4List = str_split($rev_str,4);
// 億万表記を組み立てる
$res = ''; // 億万表記の文字列
foreach($keta4List as $i => $keta4){
$k = strrev($keta4);
$k = $k + 0;
if(!empty($k)){
$unit = '';
if(!empty($unitList[$i])) $unit = $unitList[$i];
$k = $k . '';
$res = $k . $unit . $res;
}
}
return $res;
}
$str2 = preg_replace("/( | )/", "", $str);
$tests =[
'neko',
'neko/',
'animal/neko',
'x/animal/neko/',
];
echo "<table class='tbl2'><thead><tr><th>元データ</th><th>末尾のセパレータ無し</th><th>末尾のセパレータ有り</th></tr></thead><tbody>";
foreach($tests as $dp){
echo "<tr>";
echo "<td>{$dp}</td>";
$dp1 = dpEndSp($dp);
echo "<td>{$dp1}</td>";
$dp2 = dpEndSp($dp, true);
echo "<td>{$dp2}</td>";
echo "</tr>";
}
echo "</tbody></table>";
/**
* ディレクトリパスの末尾のセパレータを除去、もしくは追加
* @param string $dp ディレクトリパス
* @param boolean $end_sep_flg false:セパレータ除去(def), true:セパレータ追加
* @param string $sep セパレータ
* @return string ディレクトリパス
*/
function dpEndSp($dp, $end_sep_flg=false, $sep ='/'){
if(empty($dp)) return '';
$e_s = mb_substr($dp, -1);
if($e_s==$sep && $end_sep_flg==false ){
$dp = mb_substr($dp, 0, mb_strlen($dp)-1);
}elseif($e_s!=$sep && $end_sep_flg==true ){
$dp .= $sep;
}
return $dp;
}
出力
元データ | 末尾のセパレータ無し | 末尾のセパレータ有り |
---|---|---|
neko | neko | neko/ |
neko/ | neko | neko/ |
animal/neko | animal/neko | animal/neko/ |
x/animal/neko/ | x/animal/neko | x/animal/neko/ |
$str = '1456a';
$str2 = mb_convert_kana($str, 'n');
echo $str2; // → 1456a
// 全角スペースを半角スペースに変換
$str = 'A B C';
$str2 = mb_convert_kana($str, 's');
echo $str2; // → A B C
$str = mb_convert_kana($str, 'a');