【问题标题】:How can I filter all elements out, which are a substring from another element?如何过滤掉所有元素,它们是另一个元素的子字符串?
【发布时间】:2015-11-10 14:38:07
【问题描述】:

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

banana
banan
bana
ban
ba
apple
appl
app
ap

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

apple
banana

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

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

【问题讨论】:

  • 遍历数组,如果单词/字符串在您的查找/字典(完整单词)中不完全匹配,则删除它?
  • 如果子字符串也是完整的单词怎么办?喜欢沙子还是沙袋里的袋子?
  • 好点。在这种情况下,我需要手动指定哪些子字符串确实是不应删除的有效单词。

标签: php arrays string substring


【解决方案1】:

这应该适合你:

与您的想法类似,我只需使用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_filter() 调用周围使用 array_values()

【讨论】:

猜你喜欢
  • 2022-11-02
  • 2023-01-18
  • 1970-01-01
  • 2019-08-03
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
相关资源
最近更新 更多