我希望从我的大数组中删除少于两个字符的值,这些字符包含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>";
但效果较慢。是否可以优化此代码?
答案 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会使事情变得太复杂而无需......