[英]PHP Multi-Dimensional Array: Finding a multi-element sub-array match … is there an alternate option to looping?
我们有一些客户数据在一个单独的数据存储中开始。 我有一个合并脚本来标准化并将其迁移到我们的核心数据库中。 有大约60,000-70,000条记录正在迁移。
当然,有一个小虫子,它在第9k排失败了。
我的下一个技巧是让脚本能够在再次运行时从中断处继续。
供参考:
源记录非常蹩脚,并按照他们购买的品牌划分了5个表... IE:
create TABLE `brand1_custs` (`id` int(9), `company_name` varchar(112), etc...)
create TABLE `brand2_custs` (`id` int(9), `company_name` varchar(112), etc...)
当然,给定的公司名称可以(并且确实)存在于多个源表中。
无论如何......我使用ParseCSV lib进行日志记录,如果成功迁移,每行都会被记录(如果它们过于丑陋而无法以编程方式解析,则会跳过某些行)。 使用ParseCSV打开日志时,它看起来像:
array(
0 => array( 'row_id' => '1',
'company_name' => 'Cust A',
'blah' => 'blah',
'source_tbl' => 'brand1_cust'
),
1 => array( 'row_id' => '2',
'company_name' => 'customer B',
'blah' => 'blah',
'source_tbl' => 'brand1_cust'
),
2 => array( 'row_id' => '1',
'company_name' => 'Cust A',
'blah' => 'blah',
'source_tbl' => 'brand2_cust'
),
etc...
)
我目前的工作流程如下:
foreach( $source_table AS $src){
$results = // get all rows from $src
foreach($results AS $row){
// heavy lifting
{
}
我的计划是检查
$row->id
和$src->tbl
组合
在比赛中
$log[?x?]['row_id']
和$log[?x?]['source_tbl']
组合。
为了实现这一目标,我将不得不做foreach($log AS $xyz)
内部循环foreach($results AS $row)
循环,并跳过那些被发现已迁移的所有行(否则,他们会得到重复)。
这似乎是很多循环给我。
当我们在#40或5万的记录中起床时怎么样?
这将是50k x 50k循环!!
题:
有没有更好的方法让我检查一个子数组是否有“row_id”和“source_tbl”匹配而不是每次循环?
注意:一如既往,如果有一种完全不同的方式我应该考虑这个,我对任何和所有的建议开放:)
我认为您应该对日志执行row_id and
source_tbl
的散列(或组合键)的row_id and
并将其存储在散列映射中,然后为每一行构建密钥的散列并检查它是否已在散列映射中定义。
我告诉你使用散列集,因为你可以用O(k)
时间搜索它,否则它就像你提出的那样只是一个更干净的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.