Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从大型数组中快速删除少于两个字符的值?_Php_Performance - Fatal编程技术网

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

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("ӯ","ӯро","ӯт","ғариб","афтода

我希望从包含9436065个字符串值的my大数组中删除少于两个字符的值。我用
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"));