【问题标题】:PHP explode over every other word with a twist?PHP 用一个扭曲的方式在所有其他单词上爆炸?
【发布时间】:2009-05-13 11:31:42
【问题描述】:

重复:Explode over every other word

$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. 

)

所以基本上每2个单词的短语都会输出。

有人知道解决办法吗???

【问题讨论】:

标签: php explode


【解决方案1】:

这将提供您正在寻找的输出

$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;
}

【讨论】:

  • 谢谢你,sylviain,这是最有帮助的。我不是 php 大师,我读了几篇文章来理解你的代码,但现在我明白了 =) 我什至让它每 3 个单词都能工作,这是我的下一个挑战。再次感谢
  • stackoverflow.com/questions/857441/…查看一个无需计数/索引的解决方案(使用“追逐指针”)
【解决方案2】:

使用“追逐指针”的替代方法是这个 sn-p。

$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 等)总是很有趣。

【讨论】:

  • 为什么不使用$previous = array_shift($arr); 而不是这两个步骤?
  • 我不知道array_shift 返回了第一个元素。就那么简单。谢谢。
【解决方案3】:

没有循环(和可变字数)的简短解决方案:

    function splitStrByWords($sentence, $wordCount=2) {
        $words = array_chunk(explode(' ', $sentence), $wordCount);
        return array_map('implode', $words, array_fill(0, sizeof($words), ' '));
    }

【讨论】:

  • 返回 n 个词段,但不返回到前面的词
【解决方案4】:

想到两个快速选项:按每个单词分解并成对重新组合,使用正则表达式而不是explode()来拆分字符串。

【讨论】:

  • 但是要找到一个能够做到这一点的正则表达式一点也不容易。我认为先爆炸再配对解决方案是可行的方法。
【解决方案5】:
$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 是解决方案。

【讨论】:

    【解决方案6】:
      $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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-10
      • 2014-12-15
      • 2016-02-23
      • 2023-03-11
      • 2014-11-21
      • 2012-04-06
      • 2022-08-23
      • 2011-07-20
      相关资源
      最近更新 更多