文字列から連続する数値部分を抽出する(複数一致に対応)


	<?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
abc1212
abc12341234
あいう12341234
あいう8765neko5678x8765
5678
abc1234def1234
1234def1234
abc12345678912345678

位置指定して文字列の一部を置換する(マルチバイトに対応 mb_substr_replace)

公式 Github


	<?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]);
	}
	?>
	

文字列のバイト数を取得 | UTF-8

	<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>
	
検証文字バイト数
11
a1
+1
3
3
1233
漢字6
大猫128
Σ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;
    }

出力

元データ末尾のセパレータ無し末尾のセパレータ有り
nekonekoneko/
neko/nekoneko/
animal/nekoanimal/nekoanimal/neko/
x/animal/neko/x/animal/nekox/animal/neko/

全角数字を半角数字に変換する


	$str = '1456a';
	$str2 = mb_convert_kana($str, 'n');
	echo $str2; // → 1456a
	

mb_convert_kana関数は他にも、ひらがなをカタカナに変えるなどいろいろできるようだ。( mb_convert_kana関数)


全角スペースを半角スペースに変換する


	// 全角スペースを半角スペースに変換
	$str = 'A B C';
	$str2 = mb_convert_kana($str, 's');
	echo $str2; // → A B C
	


全角記号を半角に変換する


	$str = mb_convert_kana($str, 'a');