如何从大型数组中快速删除少于两个字符的值?

时间:2017-10-19 03:40:21

标签: php performance

我希望从我的大数组中删除少于两个字符的值,这些字符包含9436065个字符串值。我使用以下代码删除了preg_grep()

function delLess($array, $less)
{
    return preg_grep('~\A[^qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM]{'.$less.',}\z~u', $array);
}

$words = array("ӯ","ӯро","ӯт","ғариб","афтода","даст", "ра");

echo "<pre>";
print_r(delLess($words,2));
echo "</pre>";

但效果较慢。是否可以优化此代码?

4 个答案:

答案 0 :(得分:-1)

考虑到数据集的大小,我会使用数据库,所以它可能看起来像这样:

delete from table where length(field) <= 2

也许像sqlite?

答案 1 :(得分:-1)

您可以尝试使用strlen函数而不是正则表达式,看看是否更快。 (或者mb_strlen用于多字节字符。)

$newArr = array();
foreach($words as $val)
    if(strlen($val) > 2)
        $newArr[] = $val;

echo "<pre>";
print_r($newArr);
echo "</pre>";

答案 2 :(得分:-1)

我会选择array_filter功能,性能应该更好。

function filter($var)
{
  return strlen($var) > 2;
}

$newArray = array_filter($array, "filter"));

答案 3 :(得分:-1)

任何关于1000万字符串的工作都需要时间。在我看来,这种操作是一个计时器,所以如果它不是瞬时的并不重要。

字符串来自哪里?你当然是从数据库中获取它们,如果是这样的话,在数据库上做的工作会更快,至少你不会被它们污染。这种操作在数据库上比PHP快,但仍然需要时间。

同样,如果它存储在数据库中,它就没有神奇地存在......所以你也可以确保没有新的不需要的条目进入它,这样你就可以确保不需要重做这个操作

我知道这绝对不能回答你的问题,因为我们应该坚持使用PHP并且你有最好的方法来做到这一点...优化这么简单的功能会花费很多时间而且不会#39 ; t带来很多,如果有任何优化...我可以做的唯一其他建议是使用另一个工具,如果不是基于数据库,基于文件,如sed,awk或任何读/写文件......你&#39; d每行有一个字符串,并解析文件相应地减小其大小,但是从PHP编写文件,执行脚本并将文件加载回PHP会使事情变得太复杂而无需......