1行あたりの文字列を指定バイト数で改行しようとしたい場合などに使えます。
わざわざ記事にすることでもないかもしれないけどw
文字列を80バイトごとに改行させて表示させてみたいと思います。
<?php
/*
文字列$charについて、
上限$rows行まで、1行あたり$sizeバイトに整形した配列を返す
@arg
$char:string 加工前の文字列
$size:int 1行あたりの上限文字バイト数
$rows:int 上限行数
@return array(文字列を行ごとに分割した配列)
*/
function custom_string($char, $size, $rows = 2){
$all_length = strlen(bin2hex($char)) / 2; //16進数に変換してバイト数を取得する(※文字コードを問わず、シングルバイト文字1文字は必ず2文字の16進数に変換されるため)
$returnString = "";
$byte_num = 0;
$num = 0; //行数(return配列のキー)
$resultArr = array();
for ($i = 0; $i < $all_length; $i++) {
$tmp_char = mb_strcut($char, $i, 1);
if (ord($tmp_char) === 0) { //2バイトの文字列の場合
$tmp_char = mb_strcut($char, $i, 2);
$byte_num += 2;
$i++; //2バイト分繰り上げるため
} else {
$byte_num += 1;
}
if ($byte_num > $size) { //行の上限文字数を超えた場合は、配列を繰り上げる(改行させる)
$num++;
$byte_num = 0;
}
if ($rows === $num) { //行の上限数でループを抜ける
break;
}
$resultArr[$num] .= $tmp_char;
}
return $resultArr;
}
$str = '1234567890';
for ($i = 0; $i < 20; $i++) {
$str_join .= $str; //書くのがめんどくさいのでwww
}
$result = implode("<br>\n", custom_string($str_join, 80, 4));
echo $result;
No related posts.
連投すみません。
コードが消えてしまったので。
php if (!empty($items)) : ?
の直前に
?>
が足りないかもです
type:コメント [ ]