php 相关问题

PHP(PHP:Hypertext Preprocessor)是一种广泛使用的,高级,动态,面向对象和解释的脚本语言,主要用于服务器端Web开发。

依赖下拉菜单,第二个下拉菜单未填充,Codeigniter

我有一个依赖下拉列表,它可以获取第一个下拉列表中的类别,并且应该获取第二个下拉列表中的子类别,但子类别下拉列表未填充。我有类似的东西...

回答 1 投票 0

Symfony 3.4 - 如果多对多关系上不存在则坚持

我面临着一个非常烦人的问题。我有一个 Recipe 实体,其中包含一些具有多对多关系的成分(带有一个 Ingredient 实体)和一个用于映射的 RecipeIngredient 实体。 ...

回答 1 投票 0

如何使用 Laravel 本地化工具更改布局的语言?

我正在使用 Laravel 的本地化工具来更改应用程序的语言(英语和法语)。通过导航栏中的选择即可更改语言。 有了官方文档我...

回答 2 投票 0

Yii2 设置只读属性

大家好 当我尝试创建客户端时,出现错误:设置只读属性:app\models orm\ClientForm::Clientclient 我该如何修复这个错误? 这是我的客户客户(模型) 班级

回答 2 投票 0

如果某个值出现 3 次或更多次,则过滤数组

嘿,所以我构建了一个过滤组合列表的脚本,它只输出不会重复超过2次的组合,但它超级慢,这是我的脚本: 嘿,所以我构建了一个过滤组合列表的脚本,它仅输出不会重复超过 2 次的组合,但它超级慢,这是我的脚本: <?php ini_set('max_execution_time', '-1'); ini_set('memory_limit', '-1'); $fileCombo = file("ww.txt", FILE_IGNORE_NEW_LINES); $output = fopen("workpless.txt", "a") or die("Unable to open file!"); //all domains of the entire list $domains = array(); //only domains that repeat themself less than 2 times $less = array(); //takes the combo list explode it to domain names foreach ($fileCombo as $combo) { $pieces = explode(":", $combo); $email = explode("@", $pieces[0]); //import domains to array $domains[] = strtolower($email[1]); } //count each string in the array $ac = array_count_values($domains); //this foreach just filter all the domains that not repeat themself over 2 times foreach ($ac as $email => $item) { if($item <= 2) { $less[] = $email; } } /* this foreach is the one that makes all the trubles, it takes all the domains that the last foreach filtered and its runing it 1 by 1 on the entire combo list to get the actual combo */ foreach ($less as $find) { $matches = array_filter($fileCombo, function($var) use ($find) { return preg_match("/\b$find\b/i", $var); }); foreach ($matches as $match) { $data = $match . PHP_EOL; fwrite($output, $data); } } fclose($output); ?> 伪代码(我能做的最好的): file1: [email protected]:password [email protected]:password [email protected]:password [email protected]:password [email protected]:password array "fileCombo" load file1 into the array splitting each line by ":" so you will get [0][email protected], [1]password splitting value [0] by "@" so you will get [0]example, [1]example.com putting value [1] into new array called "domains" counting how many duplicates of each domain putting all the domains that have less than 2 dupes inside new array that called "less" runing 1 by 1 each domain in "less" array on "fileCombo" array if "less" value was found inside "fileCombo" array value Than write the entire line from "fileCombo" into a text file 这个脚本用于每次 2~5M 行的大文件,这就是为什么我需要优化它(当你在上面运行 20k 行时它很快)。 以下应该是适合您的情况的最“简洁”的解决方案。但是您应该在大文件上测试它(2~5M): 比方说,file1.txt 包含这些行: [email protected]:password [email protected]:password [email protected]:password [email protected]:password [email protected]:password $combos = file_get_contents("file1.txt"); preg_match_all("/\b\S+?@(\S+?):\S+?\b/m", $combos, $matches); $less = array_filter(array_count_values($matches[1]), function ($v){ return $v <= 2; }); // $matches[0] - is an array of lines // $matches[1] - is an array of domains in respective positions as lines $matched_lines = ""; foreach (array_keys($less) as $domain) { $matched_lines .= $matches[0][array_search($domain, $matches[1])] . PHP_EOL; } if ($matched_lines) { file_put_contents("workpless.txt", $matched_lines, FILE_APPEND); } // Now "workpless.txt" contains the following lines: [email protected]:password [email protected]:password 更新: 显示该域的所有相关行,但 1M 行文件需要花费 5 秒以上的时间 在 80,000 行(40,000 条独特行)上进行测试 - 2.5 MB Memory Usage 69,994,816 bytes 70,246,808 bytes (process) 71,827,456 bytes (process peak) Execution Time 0.54409 seconds 在 1,000,000 行(500,000 条独特行)上进行测试 - 33 MB Memory Usage 864,805,152 bytes 865,057,144 bytes (process) 866,648,064 bytes (process peak) Execution Time 8.9173 seconds 我的测试机是 i7-3612QM (CPU Mark 6833) 4GB RAM SSD 来自 80,000 行文件的样本 [email protected]:password [email protected]:password [email protected]:password [email protected]:password [email protected]:password [email protected]:password [email protected]:password [email protected]:password 这是您的新版本:)) <?php // System Start Time define('START_TIME', microtime(true)); // System Start Memory define('START_MEMORY_USAGE', memory_get_usage()); function show_current_stats() { ?> <b>Memory Usage</b> <pre> <?php print number_format(memory_get_usage() - START_MEMORY_USAGE); ?> bytes <?php print number_format(memory_get_usage()); ?> bytes (process) <?php print number_format(memory_get_peak_usage(TRUE)); ?> bytes (process peak) </pre> <b>Execution Time</b> <pre><?php print round((microtime(true) - START_TIME), 5); ?> seconds</pre> <?php } // Script start here $fileCombo = file("ww.txt", FILE_IGNORE_NEW_LINES); $output = fopen("workpless.txt", "a") or die("Unable to open file!"); //all domains of the entire list $domains = array(); //only domains that repeat themself less than 2 times $less = array(); //let make relateion between domains and its position(keys) in fileCombo $domains_keys = array(); //takes the combo list explode it to domain names foreach ($fileCombo as $key => $combo) { $pieces = explode(":", $combo); $email = explode("@", $pieces[0]); //import domains to array $domains[] = strtolower($email[1]); // check if domain exists or create new domain in $domains_keys array if (isset($domains_keys[strtolower($email[1])] )) { $domains_keys[strtolower($email[1])][] = $key; } else { $domains_keys[strtolower($email[1])] = array($key); } } //count each string in the array $ac = array_count_values($domains); //this foreach just filter all the domains that not repeat themself over 2 times foreach ($ac as $email => $item) { if($item <= 2) { $less[] = $email; } } foreach ($less as $find) { array_map(function($domain_key) use ($fileCombo, $output) { $data = $fileCombo[$domain_key] . PHP_EOL; fwrite($output, $data); }, $domains_keys[$find]); } fclose($output); // uncomment to show stats : Credit go to micromvc /* show_current_stats(); */ 输出 [email protected]:password [email protected]:password [email protected]:password [email protected]:password [email protected]:password

回答 2 投票 0

PHP ini_设置内存限制

当我们在代码中使用如下所示的 ini_set 时,所有其他代码的内存限制是否相同?或者仅对我们添加的代码有效? ini_set('内存限制', '512M'); 谢谢

回答 2 投票 0

为什么使用短回显标签时会收到 T_ECHO? [已关闭]

PHP 文档指出: <%= $variable; # This is a shortcut for "<% echo . . ." %> 这是“”的快捷方式 ...是...

php
回答 1 投票 0

sprintf() 的 %g 占位符正在截断数字,并以逗号作为小数分隔符

我有以下数字:-4, -3.5, 0, 14.46 我应该使用哪种 sprintf() 格式? 现在我使用 %g,但这会从 14,46 打印 14。为什么会出现这种情况?

回答 1 投票 0

使用比提供的值更少的占位符调用 sprintf() 是否安全?

我只是想知道省略 sprintf 的参数是否会导致任何问题。 我不太记得了,但我想在我的一个网站上,如果我省略了参数,它就会出错,但我尝试过......

回答 1 投票 0

在 sprintf() 的格式字符串中多次访问一个变量

我想用 sprintf 格式化一个字符串,但多次重复一个参数。看.. $str = "Str 1: %s - Str 2: %s - 再次Str 2: %s"; 考虑到要格式化的字符串,我想重复第二个......

回答 1 投票 0

PHP 复杂的 Sprintf

我正在开发一个系统来记录用户的操作,例如购买的商品、添加的朋友等等。例如,当用户购买某些产品时,您的

回答 2 投票 0

sprtinf() 的 %g 占位符正在截断数字,并以逗号作为小数分隔符

我有以下数字:-4, -3.5, 0, 14.46 我应该使用哪种 sprintf() 格式? 现在我使用 %g,但这会从 14,46 打印 14。为什么会出现这种情况?

回答 1 投票 0

登录时删除按钮(wordpress)

我正在尝试删除我网站上所有登录用户的按钮。注销后,我的起始页上有一个注册按钮 - 我想在用户登录时将其删除。不是菜单项 - 但是...

回答 1 投票 0

将二维数组的行转换为多级组

我早些时候试图问这个问题,但没有提供足够的信息...... 我正在从数据库中提取信息。我拉的每一行看起来像这样, { “组”:“广告...

回答 1 投票 0

希望修改 GoDaddy 增强结帐按钮文本

我正在尝试修改 go爸爸增强结账按钮文本。目前显示“立即付款”,我想对此进行调整。我对此一无所知,但这是我复制的 html 代码。我是

回答 1 投票 0

Stripe 支付网关自动化

所以我最近尝试使用 PHP 来使用 Stripe Payments Gateway 我可以让它及其工作绝对正常,只是事实上它滞后了一些东西,如果我进入这个节目的index.php页面......

回答 2 投票 0

如何获取 WooCommerce 产品变体属性值

我希望能够列出变体选项值。例如,我有一个 12 英寸、14 英寸和 16 英寸的灯笼。我希望能够获得这些值。我一直在尝试使用 foreach

回答 1 投票 0

从当前上下文中的别名中获取 WooCommerce 产品属性术语名称[重复]

我正在为产品构建自定义表格,我试图将简单的产品和变体添加到同一个表格中。到目前为止我已经做到了这一点,但我需要修改变体产品的标题...

回答 1 投票 0

获取当前上下文中任何属性及其 slug 的标签

我正在为产品构建自定义表格,我试图将简单的产品和变体添加到同一个表格中。到目前为止我已经做到了这一点,但我需要修改变体产品的标题...

回答 1 投票 0

PHP 邮件中无法正确显示法语字符

我有一个基本的 PHP 邮件表单,但无论我做什么,如果语言是用法语口音编写的,我似乎无法在发送后正确显示字符。 我正在使用的例句...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.