gpt4 book ai didi

PHP 多维数组 : Finding a multi-element sub-array match . .. 是否有循环的替代选项?

转载 作者:搜寻专家 更新时间:2023-10-31 22:08:06 24 4
gpt4 key购买 nike

我们有一些客户数据开始于一个单独的数据存储区。我有一个整合脚本来标准化并将其迁移到我们的核心数据库中。大约有 60,000-70,000 条记录正在迁移。

自然是有点bug,在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 库进行日志记录,如果成功迁移,每一行都会被记录下来(如果某些行太难看而无法以编程方式解析,则会被跳过)。当用 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 或 50 000 左右起床时呢?
那将是 50k x 50k 循环!!

问题:
有没有比每次循环都更好的方法来检查子数组是否有“row_id”和“source_tbl”匹配other


注意:一如既往,如果有完全不同的方式来思考这个问题,我愿意接受任何和所有的建议:)

最佳答案

我认为您应该对日志进行预处理,对 row_id 和 source_tbl 进行散列(或组合键),然后将其存储在散列图中,然后为每一行存储只需构建 key 的散列并检查它是否已在散列图中定义。

我告诉您使用散列集,因为您可以用 O(k) 时间在其中进行搜索,否则它将与您提议的一样,只是它是一个更清晰的代码。

关于PHP 多维数组 : Finding a multi-element sub-array match . .. 是否有循环的替代选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15663648/

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