2017-10-19 58 views
2

我想从我的大数组中删除少于两个字符的值,它们的字符串值为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

您可以使用'isset [1])'但是对于多字节字符串不能可靠地工作,例如它会删除“pa”。你从哪里获得阵列?你能不能在源头过滤它? – Gordon

+0

如果我们有更多关于这些字符串的使用和来源的信息,答案当然可以变得更好。将我们限制在我们现在所知道的范围内,我没有看到任何改变任何事情的理由...... – Salketer

回答

-1

给出的数据集的大小,我会使用一个数据库,所以它可能是这样的:

delete from table where length(field) <= 2 

可能像SQLite的?

-1

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

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

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

为什么这是低调的?我认为这是一个可以接受的答案?我不明白人... –

-1

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

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

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

也可以接受,也downvoted,看起来像人们就像“不喜欢的东西”跆拳道男子... –

+0

是的,不知道为什么我得到一个downvote:/ – jabko87

-1

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

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

再次,如果它被存储在数据库中,还没有到达那里神奇......所以,你也可以确保没有新的不必要的条目它得到,这样你确保这个操作不会需要是重做。

我知道这绝对不会回答你的问题,因为我们应该坚持PHP,你有最好的方式来做到这一点......优化这样一个简单的功能将花费大量的时间,如果有任何优化,我会带来很多......唯一的其他建议是使用另一种工具,如果不是基于数据库的,基于文件的如sed,awk或任何读取/写入文件的东西......您将拥有一个字符串和解析文件相应地减小其大小,但从PHP写入文件,执行脚本并将文件重新加载到PHP中会使事情变得复杂,因为没有任何内容...

+0

字是从'表格'从用户端或外部'文件'(doc,docx)添加到数据库中。此功能对于删除少于2个字符的不需要的单词是必需的。 @Salketer – Otabek

+0

好的,谢谢澄清。当你说少于2个字符时,是否有任何字符?因为在你的OP中它看起来并不那么......此外,这些单词是单独存储还是一起存储在一个字段中? – Salketer

+0

这里我们只谈论由字母组成的单词。 @Salketer – Otabek

相关问题