Php 如何从大型数组中快速删除少于两个字符的值?
我希望从包含9436065个字符串值的my大数组中删除少于两个字符的值。我用Php 如何从大型数组中快速删除少于两个字符的值?,php,performance,Php,Performance,我希望从包含9436065个字符串值的my大数组中删除少于两个字符的值。我用preg\u grep()删除了以下代码: function delLess($array, $less) { return preg_grep('~\A[^qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM]{'.$less.',}\z~u', $array); } $words = array("ӯ","ӯро","ӯт","ғариб","афтода
preg\u 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>";
函数delLess($array,$less)
{
返回preg_grep(“~\A[^qwertyuiopasdfghjklzxcvnmqwertyuiopasdfghjklzxcvnm]{.$less.”,}\z~u',$array);
}
$words=数组(“ӯ”、“ӯаа”、“ғааа”、“ааааа”、“ааа”);
回声“;
打印(delLess($words,2));
回声“;
但它的工作速度较慢。有可能优化此代码吗?考虑到数据集的大小,我会使用数据库,因此它可能会如下所示:
$newArr = array();
foreach($words as $val)
if(strlen($val) > 2)
$newArr[] = $val;
echo "<pre>";
print_r($newArr);
echo "</pre>";
delete from table where length(field)给定数据集的大小,我会使用一个数据库,所以它可能看起来像这样:
$newArr = array();
foreach($words as $val)
if(strlen($val) > 2)
$newArr[] = $val;
echo "<pre>";
print_r($newArr);
echo "</pre>";
delete from table where length(field)您可以尝试使用strlen函数而不是正则表达式,看看这是否更快。(或mb_strlen表示多字节字符。)
$newArr=array();
foreach($val)
如果(斯特伦($val)>2)
$newArr[]=$val;
回声“;
印刷费($newArr);
回声“;
您可以尝试使用strlen函数而不是正则表达式,看看这是否更快。(或mb_strlen表示多字节字符。)
$newArr=array();
foreach($val)
如果(斯特伦($val)>2)
$newArr[]=$val;
回声“;
印刷费($newArr);
回声“;
我会选择功能,性能应该更好
我会选择功能,性能应该更好
任何关于1000万条弦的工作都需要时间。在我看来,这种操作是一个计时器,所以如果不是瞬时的,其实并不重要
弦从哪里来?你当然是从数据库中得到它们的,如果是这样的话,在数据库中工作会更快,至少你永远不会被它们污染。在数据库上,这种操作将比PHP更快,但仍然需要时间
同样,如果它存储在数据库中,它并没有神奇地到达那里。。。因此,您还可以确保没有新的不需要的条目进入其中,这样您就可以确保不需要重新执行此操作
我知道这绝对不能回答你的问题,因为我们应该坚持使用PHP,而你已经找到了最好的方法。。。优化这样一个简单的函数将花费大量的时间,如果进行任何优化,也不会带来太多的结果。。。我唯一能提出的另一个建议是使用另一个工具,如果不是基于数据库、基于文件的,比如sed、awk或任何读/写文件的工具。。。每行一个字符串,并相应地减小文件的大小,但是从PHP编写文件、执行脚本并用PHP加载文件会使事情变得太复杂……任何处理1000万个字符串的工作都需要时间。在我看来,这种操作是一个计时器,所以如果不是瞬时的,其实并不重要
弦从哪里来?你当然是从数据库中得到它们的,如果是这样的话,在数据库中工作会更快,至少你永远不会被它们污染。在数据库上,这种操作将比PHP更快,但仍然需要时间
同样,如果它存储在数据库中,它并没有神奇地到达那里。。。因此,您还可以确保没有新的不需要的条目进入其中,这样您就可以确保不需要重新执行此操作
我知道这绝对不能回答你的问题,因为我们应该坚持使用PHP,而你已经找到了最好的方法。。。优化这样一个简单的函数将花费大量的时间,如果进行任何优化,也不会带来太多的结果。。。我唯一能提出的另一个建议是使用另一个工具,如果不是基于数据库、基于文件的,比如sed、awk或任何读/写文件的工具。。。每行一个字符串,并相应地减小文件的大小,但从PHP编写文件、执行脚本并用PHP加载文件会使事情变得太复杂……你可以使用isset($word[1])
,但这对多字节字符串不可靠,例如,它会删除“pa”。您首先从哪里获得阵列?你已经可以在源代码处进行过滤了吗?如果我们有更多关于这些字符串的用法和来源的信息,答案肯定会更好。仅限于我们现在知道的内容,我看不出有任何理由更改任何内容……您可以使用isset($word[1])
,但这对多字节字符串不可靠,例如,它会删除“pa”。您首先从哪里获得阵列?你已经可以在源代码处进行过滤了吗?如果我们有更多关于这些字符串的用法和来源的信息,答案肯定会更好。仅限于我们现在知道的内容,我看不出有任何理由更改任何内容…文字是从用户端的表单
或外部文件
(doc,docx)中提取的,以添加到数据库中。此功能对于删除少于2个字符的不需要的单词是必需的@Salketerok,谢谢你的澄清。当你说少于2个字符时,是否有字符?因为在你的作品中似乎不是这样。。。另外,单词是单独存储还是一起存储在一个字段中?这里我们只讨论由字母组成的单词@SalketerList of letters:a-zA-Zаa-Яa-Яa-Яa-Яa-Яa-бa-бa-бa-бa-бa-бaбaҷaӣaөaөaөaөaӤaӤaӨӨヨӨ。此功能对于删除少于2个字符的不需要的单词是必需的@Salketerok,谢谢你的澄清。当你说少于2个字符时,是否有字符?因为在你的作品中似乎不是这样。。。另外,单词是单独存储还是一起存储在一个字段中?这里是tal
function filter($var)
{
return strlen($var) > 2;
}
$newArray = array_filter($array, "filter"));