我有两个大的二维数组(从一些 xml 数据中提取)一个(A 列表)是约 1000 个包含 5 个字段的项目,另一个(B 列表)在 10.000-12.000 个包含 5 个字段的项目之间。
我的想法是将列表 A 的每个 id 键与列表 B 的每个 id 键进行比较,并在“true”上组成一个新的组合字段数组,或者如果不匹配,则仅来自数组 A 的字段。
我使用了嵌套的 foreach 循环,最终导致数百万次迭代需要很长时间来处理。不用说...不是解决方案。
这两种结构的形式和我需要的结果立刻让我想起了 sql join。
问题是: 1.) 我应该尝试 sql 还是嵌套 foreach 可能不是最好的 php 方式?2.) 关系查询会比迭代快得多吗?
编辑:
我只定期从包含每个节点的 10 多个字段的 xml 文件(在单独的进程中)中提取数据。我将需要的 5 个字段存储在 CSV 文件中,以便稍后与我从 mysql 数据库中提取的表 A 进行比较。基本上很像使用新鲜提要更新属性的目录。我害怕存储到 CSV 的最初想法是一个错误,我也应该将提要更新保存到数据库中。
编辑 2
数组列表 B 如下所示
Array
(
[0] => Array
(
[code] => HTS541010A9E680
[name] => HDD Mobile HGST Travelstar 5K100 (2.5", 1TB, 8MB, SATA III-600)
[price] => 385.21
[avail] => 0
[retail] => asbis
)
...
...
而 A 列表除“代码”字段外其他所有内容都相似,这是唯一可用于比较的字段
Array
(
[0] => Array
(
[code] => ASD-HTS541010A
[name] => HDD Mobile HGST Travelstar 5K100 (2.5", 1TB, 8MB, SATA III-600)
[price] => 385.21
[avail] => 0
[retail] => asbis
)
正如您所看到的,每个提要都有通用代码,但有一些不同的随机数据作为前缀或后缀,因此在每个循环中,我必须对字符串执行一些操作以进行 stripos 或将其与提要 id 进行比较以进行匹配或紧密匹配。
伪代码:
$mylist = loadfromDB();
$whslist = loadfromCSV();
foreach ($mylist as $myl) {
foreach ($whslist as $whl){
if ((stripos(code_a,code_b) OR (code_b,code_a) !== false)){
...
}
elseif (stripos(substr(strstr(code_a,'-'),1),code_b) !== false) {
...
}
elseif (stripos( substr(code_a,0,-5);) == !false ){
...
}
}
}