1

50語ごとに配列に入れたい大きな文字列があります。strsplitを使用してカットすることを考えましたが、単語が考慮されないことに気付きました。x文字になると分割するだけです。

str_word_countについて読みましたが、2つを組み合わせる方法がわかりません。

私が今持っているのは:

$outputArr = str_split($output, 250);

foreach($outputArr as $arOut){

echo $arOut;
echo "<br />";

}

しかし、それを置き換えて、配列の各項目を250文字ではなく50語で形成したいと思います。

どんな助けでも大歓迎です。

4

2 に答える 2

2

これで十分であると仮定すると¹、 2 番目のパラメーターとしてstr_word_count呼び出すだけで、単語を 50 個のグループにグループ化できます。1array_chunk

$words = str_word_count($string, 1);
$chunks = array_chunk($words, 50);

これで配列の配列ができました。50単語ごとに結合して、使用できる文字列の配列にします

foreach ($chunks as &$chunk) { // important: iterate by reference!
    $chunk = implode(' ', $chunk);
}

¹ おそらくそうではありません。書き言葉を処理するときに、ほとんどの人が許容できると考える結果を得たい場合は、preg_split代わりに適切な正規表現を使用する必要があります。

于 2012-08-29T10:44:01.200 に答える
0

別の方法があります:

<?php

$someBigString = <<<SAMPLE
  This, actually, is a nice' old'er string, as they said, "divided and conquered".
SAMPLE;

// change this to whatever you need to:     
$number_of_words = 7; 

$arr = preg_split("#([a-z]+[a-z'-]*(?<!['-]))#i", 
  $someBigString, $number_of_words + 1, PREG_SPLIT_DELIM_CAPTURE);

$res = implode('', array_slice($arr, 0, $number_of_words * 2));
echo $res;

デモ

preg_splitここでは (よりも) 優れたツールを検討しstr_word_countます。後者が柔軟性に欠けるからではありません (そうではありません: 3 番目のパラメーターで単語を構成できる記号を定義できます) が、preg_splitN 個の項目を取得した後に文字列の処理を本質的に停止するからです。

この関数で非常に一般的なトリックは、区切り文字もキャプチャし、それらを使用して、最初の N 個の単語 (N が指定されている場合) と句読点が保存された文字列を再構築することです。

str_word_count(もちろん、私の例で使用されている正規表現は、ロケール依存の動作に厳密には準拠していません。ただし、単語がアルファ'-記号で構成されるように制限されており、後者の 2 つは単語の先頭と末尾ではありません)。

于 2012-08-29T11:24:01.177 に答える