gpt4 book ai didi

php - 在 PHP 中有没有比 array_diff 更快的方法

转载 作者:行者123 更新时间:2023-11-28 23:20:46 24 4
gpt4 key购买 nike

我有一组来自 MySQL 的数字,范围在 1000 0000(8 位数字)到 9 999 999 999(10 位数字)之间。它应该是连续的,但是缺少数字。我需要知道缺少哪些数字。

范围很大。起初我打算使用 PHP 来执行此操作:

//MySqli Select Query
$results = $mysqli->query("SELECT `OCLC Number` FROM `MARC Records by Number`");

$n_array = array();
while($row = $results->fetch_assoc()) {
$n_array[] = $row["OCLC Number"];
}

d($n_array);
foreach($n_array as $k => $val) {
print $val . " ";
}

/* 8 digits */
$counter = 10000000;
$master_array = array();

/* 10 digits */
while ($counter <= 9999999999 ) {
$master_array[] = $counter;
$counter++;
d($master_array);
}
d($master_array);

$missing_numbers_ar = array_diff ($master_array, $n_array);
d($missing_numbers_ar);

d() 是一个类似于 var_dump() 的自定义函数。

但是,我刚刚意识到要完成这项工作需要花费大量时间。在 15 分钟标记处,$master_array 仅填充了 4000 个数字。

我怎样才能更快地做到这一点?欢迎使用仅 MySQL 或 MySQL 和 PHP 解决方案。如果最佳解决方案取决于丢失的数字数量,请告诉我具体情况。谢谢。

最佳答案

您的 d() 可能是导致运行缓慢的原因,请将其删除,并对您的代码进行小的更改

while($row = $results->fetch_assoc()) {
$n_array[$row["OCLC Number"]] = 1;
}

$missing_numbers_ar = [];

while ($counter++ <= 9999999999 ) {
if (empty($n_array[$counter])) {
$missing_numbers_ar[] = $counter;
}
}

关于php - 在 PHP 中有没有比 array_diff 更快的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41710404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com