PHP字符串到数组

PHP字符串到数组,php,string,filter,trim,Php,String,Filter,Trim,我只需要从字符串中提取完整的单词,我的意思是完整的单词=超过4个字符的单词。 字符串的示例: "hey hello man are you going to write some code" 我需要回到: "hello going write some code" 我还需要修剪所有这些单词,并将它们放入一个简单的数组中 有可能吗?您可以使用带trim+strlen的分解和阵列过滤器来实现这一点。如果卡住了,请尝试并发布代码。您可以使用正则表达式来完成此操作 preg_replace("/\b

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

"hey hello man are you going to write some code"
我需要回到:

"hello going write some code"
我还需要修剪所有这些单词,并将它们放入一个简单的数组中


有可能吗?

您可以使用带trim+strlen的分解和阵列过滤器来实现这一点。如果卡住了,请尝试并发布代码。

您可以使用正则表达式来完成此操作

preg_replace("/\b\S{1,3}\b/", "", $str);
然后可以将它们放入带有preg_split的数组中


根据您的全部要求,如果您也需要未修改的字符串数组,您可以使用explode,类似这样的方法可以将您的单词放入数组:

$str = "hey hello man are you going to write some code";
$str_arr = explode(' ', $str);
$myArr = explode(' ', $myString);
然后,您可以使用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_数组输出:

@OP,要将其转换回字符串,只需调用内爆“”,$final\u str\u数组即可获得此输出:

hello going write some code

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

$str = "hey hello man are you going to write some code";
$str_arr = explode(' ', $str);
$myArr = explode(' ', $myString);
然后,循环并仅将长度为4或更大的数组分配给新数组:

$finalArr = array();

foreach ($myArr as $val) {
  if (strlen($val) > 3) {
    $finalArr[] = $val;
  }
}
显然,如果字符串中有逗号和其他特殊字符,它会变得更复杂,但对于基本设计,我认为这会使您朝着正确的方向前进。

使用str\u word\u count

将返回单词列表,然后使用strlen计算字母数超过n的单词

使用str_word_count比其他解决方案(如preg_match或explode)的最大优势在于,它将解释标点符号,并将其从最终单词列表中丢弃

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

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


是的,这是可能的。那么如何将它们放入数组?@Ispuk:explode“”,$string,请参阅:似乎有很多代码用于正则表达式可以使用的东西:@PeeHaa尽量避免正则表达式。在这里,它将使代码更易于维护/可读。看看rudi_visser的解决方案比alex的更具可读性吗?如果可以,请避免正则表达式对不起,但这是胡说八道。基于微观优化。我在哪里谈到了性能?请保持礼貌。不管怎样,如果你不确信的话,比较两种解决方案的投票结果。你真的是说鲁迪的答案比亚历克斯的更可读吗?让我们重新表述一下我的最后一句话,但那只是白痴。+1在我看来是最干净的。否决一个有效的解决方案,万岁!有什么特别的原因吗?编辑:我希望这不是关于正则表达式精英主义的问题。我曾经被告知,有效的解决方案并不总是有效的解决方案。除此之外,我不明白为什么有人会否决你的答案。@tereško怎么会这样?你跑了吗?它很好用。很抱歉-array10{[0]=>string3嘿[1]=>string5你好[2]=>string3人[3]=>string3你[5]=>string5去[6]=>string2到[7]=>string5写[8]=>string4一些[9]=>string4代码}array5{[1]=>string5你好[5]=>string5去[7]=>string5写[8]=>string4一些[9]=>string4代码},但基于OP的确切要求,此解决方案确实有效,并且在修改简单回调以适应任何其他情况的基础上具有足够的灵活性。这不也会捕获逗号吗?@BrianWarshaw它会捕获任何非空白字符的内容。OP没有具体说明他在这方面想要什么。显然,可以使用\w或[a-zA-Z]之类的字符类将其缩小到所需的范围。同意-只需指出即可。
$strarray = explode(' ', $str);
$new_str = '';
foreach($strarray as $word){
   if(strlen($word) >= 4)
      $new_str .= ' '.$word;
}
echo $new_str;
<?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);
?>
$string = "hey hello man are you going to write some code";
preg_match_all('/\S{4,}/', $string, $matches);

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