我使用一段代码如下:
$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个字符(即This、test、That、game、awesome、Cristiano、Ronaldo、great、Soccer和D14)的较小的单词,并在将$post传递到前级循环之前删除这些特殊字符。非常感谢你在这个问题上帮助我。
发布于 2014-06-11 01:26:34
<?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
Array ( [0] => This [1] => test [2] => That [3] => game [4] => awesome [5] => Cristiano [6] => Ronaldo [7] => great [8] => Soccer [9] => Player ) 发布于 2014-06-11 01:12:48
尝试:
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(',', '.', '(', ')', '-'));https://stackoverflow.com/questions/24153090
复制相似问题