我正在尝试使用多字节的希腊字符串并将其修剪为仅3行。我的方法是将多字节字符串拆分为一个字符数组,然后遍历它并尝试检测字符串中的换行符。但是,字符串根本没有被修剪,并且给我一些奇怪的错误。
以下是代码:
$break_count = 0;
$char_array = array();
$speech_string = "";
$break_array = array();
foreach($total_found as $speech)
{
$temp = preg_split('/(?<!^)(?!$)/u', $speech->speech_text );
foreach($temp as $char){
if($char=="\n"){
$break_count++;
array_push($break_array,"LB");
}
if($break_count < 4)
{
array_push($char_array,$char);
}else{
die(print_r(var_export($break_array) . " : " . $break_count,1));
break;
}
}
$string = join("",$char_array);
array_push($speech_array,$string);
$break_count = 0;
$loop_count++;
}
$ break_count是我用来检测到目前为止遇到的换行次数的变量,当超过3时,字符应该停止被推送到$ char_array变量。 print_r应返回4个换行符和一个包含4个“LB”元素的数组。但是,它返回以下内容: array(0 =&gt;'LB',1 =&gt;'LB',2 =&gt;'LB',3 =&gt;'LB',4 =&gt;'LB',5 =&gt;'LB', 6 =&gt;'LB',7 =&gt;'LB',8 =&gt;'LB',):4 这意味着我的代码将更多换行符推送到$ break_array,即使它在$ break_count = 4之后应该突破4循环。
非常感谢任何帮助。
答案 0 :(得分:1)
这样做你想要的吗?
$allFirst3Lines = array();
foreach($total_found as $speech)
{
$first3LinesArray = array_slice(explode("\n", $speech->speech_text), 0, 3);
array_push($allFirst3Lines, implode("\n", $first3LinesArray));
}
答案 1 :(得分:1)
如果您的多字节字符串保存为UTF-8,则换行符与ASCII换行符二进制兼容。即使使用非多字节感知的标准函数,只需通过常规换行即可完全分离。
$string = "これ\nは\nユーティーエッフエイト\nだぞ!";
echo join("\n", array_slice(explode("\n", $string), 0, 3));
> これ
> は
> ユーティーエッフエイト