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 にさらに改行をプッシュしていることを意味します。 $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 に答える