PHP تنفجر على كل كلمة أخرى مع تطور؟
سؤال
ينسخ: تنفجر على كل كلمة أخرى
$string = "This is my test case for an example."
إذا كنت لا تنفجر على أساس ' '
أحصل على
Array('This','is','my','test','case','for','an','example.');
ما أريده هو الانفجار لكل مساحة أخرى.
أنا أبحث عن الإخراج التالي:
Array(
[0] => Array (
[0] => This is
[1] => is my
[2] => my test
[3] => test case
[4] => case for
[5] => for example.
)
لذلك يتم إخراج كل عبارتين من الكلمات.
هل من أحد يعرف الحل ؟؟؟؟
المحلول
سيوفر هذا الإخراج الذي تبحث عنه
$string = "This is my test case for an example.";
$tmp = explode(' ', $string);
$result = array();
//assuming $string contains more than one word
for ($i = 0; $i < count($tmp) - 1; ++$i) {
$result[$i] = $tmp[$i].' '.$tmp[$i + 1];
}
print_r($result);
ملفوفة في وظيفة:
function splitWords($text, $cnt = 2)
{
$words = explode(' ', $text);
$result = array();
$icnt = count($words) - ($cnt-1);
for ($i = 0; $i < $icnt; $i++)
{
$str = '';
for ($o = 0; $o < $cnt; $o++)
{
$str .= $words[$i + $o] . ' ';
}
array_push($result, trim($str));
}
return $result;
}
نصائح أخرى
البديل، الذي يستخدم "مؤشرات المطاردة"، سيكون هذا المقتطف.
$arr = explode( " ", "This is an example" );
$result = array();
$previous = $arr[0];
array_shift( $arr );
foreach( $arr as $current ) {
$result[]=$previous." ".$current;
$previous = $current;
}
echo implode( "\n", $result );
من الممتع دائمًا ألا تحتاج إلى مؤشرات وأعداد، ولكن اترك كل هذه العناصر التمثيلية الداخلية للطريقة foreach (أو array_map، أو ما شابه).
حل قصير بدون حلقات (وعدد كلمات متغير):
function splitStrByWords($sentence, $wordCount=2) {
$words = array_chunk(explode(' ', $sentence), $wordCount);
return array_map('implode', $words, array_fill(0, sizeof($words), ' '));
}
يتبادر إلى ذهنك خياران سريعان:انفجر بكل كلمة وأعد تجميعها في أزواج، استخدم تعبيرًا عاديًا لتقسيم السلسلة بدلاً من الانفجار ().
$arr = explode($string);
$arr2 = array();
for ( $i=0; $i<size($arr)-1; $i+=2 ) {
$arr2[] = $arr[i].' '.$arr[i+1];
}
if ( size($arr)%2==1 ) {
$arr2[] = $arr[size($arr)-1];
}
$arr2 هو الحل.
$content="This is my test case for an example";
$tmp=explode(" ",$content);
$text = array();
$b=0;
for ($i = 0; $i < count($tmp)/2; $i++) {
$text[$i] = $tmp[$b].' '.$tmp[$b + 1];
$b++;
$b++;
}
print_r($text);
لا تنتمي إلى StackOverflow