PHP字符串单词到数组

时间:2012-09-11 12:27:34

标签: php string filter trim

我只需要从字符串中获取完整的单词,我的意思是完整的单词=超过4个字符的单词。 字符串示例:

"hey hello man are you going to write some code"

我需要回到:

"hello going write some code"

此外,我需要修剪所有这些单词并将它们放入一个简单的数组中。

有可能吗?

8 个答案:

答案 0 :(得分:5)

您可以使用正则表达式来执行此操作。

preg_replace("/\b\S{1,3}\b/", "", $str);

然后,您可以将它们放入包含preg_split()的数组中。

preg_split("/\s+/", $str);

答案 1 :(得分:5)

使用str_word_count() http://php.net/manual/fr/function.str-word-count.php

str_word_count($str, 1)

会返回一个单词列表,然后使用n

计算超过strlen()个字母的单词

使用str_word_count()优于preg_matchexplode等其他解决方案的一大优势在于它会考虑标点符号并将其从最终的单词列表中丢弃。

答案 2 :(得分:4)

根据您的完整要求以及您是否需要未修改的字符串数组,您可以使用explode来实现此目的,这样就可以将您的单词转换为数组:

$str = "hey hello man are you going to write some code";
$str_arr = explode(' ', $str);

然后您可以使用array_filter删除您不想要的字词,例如:

function min4char($word) {
    return strlen($word) >= 4;
}
$final_str_array = array_filter($str_arr, 'min4char');

否则,如果您不需要未修改的数组,则可以使用正则表达式使用preg_match_all获取超过特定长度的所有匹配项,或者替换使用preg_replace的匹配项。

最后一个选项是以基本方式执行,使用explode按照第一个代码示例获取数组,然后使用unset遍历所有内容以从数组中删除条目。但是,你还需要重新索引(取决于你后续使用的'固定'数组),这可能效率低,具体取决于数组的大小。

编辑:不确定为什么声称它不起作用,请参阅下面的var_dump($final_str_array)输出:

array(5) { [1]=> string(5) "hello" [5]=> string(5) "going" [7]=> string(5) "write" [8]=> string(4) "some" [9]=> string(4) "code" } 

@OP,要将其转换回您的字符串,您只需调用implode(' ', $final_str_array)即可获得此输出:

hello going write some code

答案 3 :(得分:1)

首先,将它们放入一个数组中:

$myArr = explode(' ', $myString);

然后,循环并仅将长度为4或更大的那些分配给新数组:

$finalArr = array();

foreach ($myArr as $val) {
  if (strlen($val) > 3) {
    $finalArr[] = $val;
  }
}

显然,如果你的字符串中有逗号和其他特殊字符,它会变得更加棘手,但对于基本设计,我认为这会让你朝着正确的方向前进。

答案 4 :(得分:1)

$strarray = explode(' ', $str);
$new_str = '';
foreach($strarray as $word){
   if(strlen($word) >= 4)
      $new_str .= ' '.$word;
}
echo $new_str;

Code Output

答案 5 :(得分:1)

不需要循环,没有嵌套函数调用,没有临时数组。只需1个函数调用和一个非常简单的正则表达式。

$string = "hey hello man are you going to write some code";
preg_match_all('/\S{4,}/', $string, $matches);

//Printing Values
print_r($matches[0]);

See it working

答案 6 :(得分:0)

<?php 
$word = "hey hello man are you going to write some code";
$words = explode(' ', $word);
$new_word;
foreach($words as $ws)
{
    if(strlen($ws) > 4)
    {
        $new_word[] = $ws;
    }
}
echo "<pre>"; print_r($new_word);
?>

答案 7 :(得分:-3)

你可以使用explode()和array_filter()和trim()+ strlen()来实现这一点。如果您遇到困难,请尝试并发布您的代码。