如何过滤掉所有元素,这些元素是另一个元素的子字符串?

时间:2015-08-17 20:31:01

标签: php arrays string substring

我正在处理一个有趣的字符串操作问题。假设我有一个包含单词的单词和子串的字符串数组:

object

我想在PHP中创建一个函数,它将我的列表过滤到:

banana
banan
bana
ban
ba
apple
appl
app
ap

我的第一个想法是遍历每个数组项并检查项的任何子字符串是否存在。如果是,请从阵列中删除它。

您对解决方案有任何其他建议吗?

1 个答案:

答案 0 :(得分:3)

这应该适合你:

与您的想法类似,我只使用array_filter()遍历每个数组元素,并使用preg_grep()检查当前数组元素是否与任何其他数组值匹配。如果是,则将其过滤掉,否则将其保留在数组中。

<?php

    $arr = ["banana", "banan", "bana", "ban", "ba", "apple", "appl", "app", "ap"];
    $newArr = array_filter($arr, function($v)use($arr){
        if(count(preg_grep("/" . preg_quote($v, "/") . "/", $arr)) > 1)
            return FALSE;
        return TRUE;
    });

    print_r($newArr);

?>

输出:

Array ( [0] => banana [5] => apple )

*如果您想重新索引数组,只需在array_values()来电时使用array_filter()