0

我正在尝试获取一个多字节的希腊字符字符串并将其修剪为仅 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 => 'LB', 1 => 'LB', 2 => 'LB', 3 => 'LB', 4 => 'LB', 5 => 'LB' , 6 => 'LB', 7 => 'LB', 8 => 'LB', ) : 4 这意味着我的代码将更多换行符推到 $break_array 上,即使它应该在之后跳出 4 循环$break_count = 4。

任何帮助深表感谢。

4

2 回答 2

1

这是做你想做的吗?

$allFirst3Lines = array();
foreach($total_found as $speech)
{
    $first3LinesArray = array_slice(explode("\n", $speech->speech_text), 0, 3);
    array_push($allFirst3Lines, implode("\n", $first3LinesArray));
}
于 2012-07-06T15:26:10.253 回答
1

如果您的多字节字符串保存为 UTF-8,则换行符与 ASCII 换行符二进制兼容。简单地通过常规换行符进行拆分是非常安全的,即使使用非多字节感知标准函数也是如此。

$string = "これ\nは\nユーティーエッフエイト\nだぞ!";
echo join("\n", array_slice(explode("\n", $string), 0, 3));

> これ
> は
> ユーティーエッフエイト
于 2012-07-06T15:28:31.457 回答