【发布时间】:2017-12-21 22:12:05
【问题描述】:
首先,我在这里阅读了一些提出类似问题的问题,但没有任何可以作为示例并正确实施到我的代码中的问题。我有一个包含几千个数字的数组,它们是目录中文件的名称。我需要运行一个 MySQL 查询来搜索这些文件名,但我需要将所有单独的查询放在另一个数组中。
这是我获取文件名的代码:
$dir = "C:/Users/EyeCandy-Brian/Desktop/jobs";
$files = array_diff(scandir($dir), array('..', '.'));
function truncate(&$fcn) {
$fcn = substr($fcn, 0, 6); // The original is '100100.dat', I only need the number
};
array_walk($files, "truncate");
数组如下所示:
2 => string '100100'
3 => string '100101'
4 => string '100102'
5 => string '100103'
// About 1,500+ Total
这是我声明的变量的 foreach 循环:
$limit = 0; // This is for testing, stops after 5 iterations.
$qryArrNum = 2; // The index for the $files array, [0] & [1] were '.' & '..'
$count = 0; // Which index I want to store the string in, starting at [0]
$qry = array(); // I declare $qry as an array
foreach ($files as &$qry) {
$qry[$count++] = "SELECT * FROM `table` WHERE `sku` LIKE '%$files[$qryArrNum]%'";
++$qryArrNum;
if (++$limit == 5) {
break;
};
};
这就是它变得疯狂的地方。使用var_dump($qry); 时,我得到'1001S4',这是不应该的。运行var_dump($files);数组的前五个字符串是:
2 => string 'S00100'
3 => string '1S0101'
4 => string '10S102'
5 => string '100S03'
6 => string '1001S4'
然后是来自文件名的预期字符串:
7 => string '100105'
8 => string '100106'
9 => string '100107'
// On for 1,500+ again
所以我的问题是,我如何让$qry 成为一个包含字符串的数组,每个字符串都是 MySQL 查询,其中包含从 $files 中搜索第一个值,以及 @987654331 中的下一个字符串@array 将从$files 中搜索下一个值。另外,为什么$files 中的前几个值与预期的完全不同?
注意:我知道按顺序运行一千多个 MySQL 查询会毁掉我的服务器,我将使用 implode(); 将它们组合成一个大查询,我只需要一开始就弄清楚这一点.
【问题讨论】:
-
您在外部有一个变量 (
$qry),它在 foreach 值中是相同的。为什么? -
foreach ($files as &$qry)是什么让你搞砸了。将其更改为foreach ($files as $file)然后您可以使用$qry[$file] = "SELECT * FROM... -
你似乎在这里把事情复杂化了。
-
另外,
$qry[$count++] =如果你要去 0、1、2、3、4 等,那也没什么意义,只需使用$qry[] =,索引会自动以数字递增。 -
@Scuzzy 哦,我的天哪,我发誓我已经读了一百万遍了,我觉得还不错,我需要更多的咖啡。非常感谢。我最初尝试了
$qry[],但它抛出了一个错误,我猜这是由于$files as $qry部分不正确。