首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP-如何将长数组(句子)拆分为较小的数组(关键字),以通过foreach循环

PHP-如何将长数组(句子)拆分为较小的数组(关键字),以通过foreach循环
EN

Stack Overflow用户
提问于 2014-06-11 00:53:02
回答 2查看 138关注 0票数 2

我使用一段代码如下:

代码语言:javascript
运行
复制
$list = array(
"This" => "9",
"great" => "10",
"God Father" => "11",
"Tony Montana" => "12",
"Ronaldo" => "13",
"Al Pacino" => "14",
"Humans" => "15",
"Play" => "16"
);

$post = Array ( [title] => "This is a test - That game is awesome (Cristiano Ronaldo is a great Soccer Player).",
                           "This is a not a test - That game is OK (Maradonal was a great Soccer Player)."
                                );

foreach ($post as $keyword) {
    foreach ($list as $word=>$num) {
        $sim_chars = similar_text($keyword, $word);
        if ($sim_chars/strlen($keyword) > .8 || $sim_chars/strlen($word) > .8) {
            $all_key_values[] = $num;
            $all_keys[] = $word;
        }
        elseif (stripos($keyword, $word) !== false || strpos($word, $keyword) !== false) {
            $sll_key_values[] = $num;
            $all_keys[] = $word;
        }
    }        
}

代码可以很好地传递像$post = array ('Humans', 'Tony Montana', 'Tech', 'Creative');这样的数组,以便将关键字与另一个数组中的另一个关键字列表匹配。但是我想传递一个类似$post结构的数组(在代码中),以从post标题中查找关键字。因此,我的问题是如何将$post值(即This is a test - That game is awesome (Cristiano Ronaldo is a great Soccer Player).)分割成长度大于2个字符(即ThistestThatgameawesomeCristianoRonaldogreatSoccerD14)的较小的单词,并在将$post传递到前级循环之前删除这些特殊字符。非常感谢你在这个问题上帮助我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-11 01:26:34

代码语言:javascript
运行
复制
<?php

$str="This is a test - That game is awesome (Cristiano Ronaldo is a great Soccer Player)";

//clean string:

$str=preg_replace("/[^A-Za-z0-9 ]/", '', $str); 

    //first explode it
    $e=explode(' ',$str);

//loop to remove short words
    $out=array();
    foreach ($e as $a){

        if(strlen($a)>2){
        $out[]=$a;  
        }
    }

print_r($out);

现场演示:http://codepad.viper-7.com/CEvYdx

代码语言:javascript
运行
复制
Array ( [0] => This [1] => test [2] => That [3] => game [4] => awesome [5] => Cristiano [6] => Ronaldo [7] => great [8] => Soccer [9] => Player ) 
票数 2
EN

Stack Overflow用户

发布于 2014-06-11 01:12:48

尝试:

代码语言:javascript
运行
复制
function funFun($pst, $lst, $spc){
  $sc = '/\\'.implode('|\\', $spc).'/';
  foreach($pst as $v){
    $pr[] = preg_replace($sc, '', $v);
  }
  $ps = preg_split('/\s+/', $pr);
  foreach($ps as $v){
    $a[] = $lst[$v];
  }
  return $a;
}
$resArray = funFun($post, $list, array(',', '.', '(', ')', '-'));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24153090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档