请考虑这个例子
Array
(
[1] => search engine optimization
[2] => engine optimization
[0] => search engine
)
我想删除引擎优化和搜索引擎,因为这些单词已经是最长的短语。这些单词不是硬编码的,上述结果是由函数生成的。我尽力编写代码但无法解决这个问题。
这是我的尝试,看起来这里的人不信任,他们擅长按下投票按钮。我的方法还不够,所以我不打算在这里分享。
$result = array('search engine', 'search engine optimization', 'engine optimization');
uasort($result, 'string_word_length');
foreach($result as $key=>$phrase) {
if( ($found = array_find($phrase, $result, $key)) != FALSE) {
unset($result[$found]);
}
}
function array_find($needle, $haystack, $skip_key = 0) {
if(!is_array($haystack)) return false;
foreach($haystack as $key=>$value) {
if($skip_key != $key && strpos($value, $needle)!==false) {
echo 'Poped ', $value, ' -- ', $key, ' -- ', $skip_key, '<br />';
return $key;
}
}
return false;
}
function string_word_length($a,$b){
return strlen($b) - strlen($a);
}
答案 0 :(得分:2)
这个怎么样(假设你使用 php&gt; = 5.3 ):
$src = array('search engine optimization',
'engine optimization',
'search engine');
$src_array = array();
foreach ($src as $val) {
$src_array[] = explode(' ', $val);
}
usort($src_array, function($a, $b) { return count($a) > count($b); });
foreach ($src_array as $key => $val) {
if ($key + 1 < count($src_array)) {
foreach ($val as $word_key => $word){
for ($i = $key + 1; $i <= count($src_array) - 1; $i++) {
if (in_array($word, $src_array[$i])) {
unset($src_array[$key][$word_key]);
}
}
}
}
}
$result = array_filter($src_array, function($i) { return count($i) > 0; });
$result = array_map(function($i) { return implode(' ', $i); }, $result);
$result = array_values($result);
var_dump($result);
对于那些没有安装php 5.3的人来说,输出结果为:array(1) { [0]=> string(26) "search engine optimization" }