我们有一些客户数据在一个单独的数据存储区中启动。我有一个合并脚本来标准化并将其迁移到我们的核心数据库中。有大约60,000-70,000条记录正在迁移。PHP多维数组:找到一个多元素的子数组匹配...有循环的替代选项吗?
当然,有一个小错误,它在第9k行左右失败。
我的下一个诀窍是让脚本能够在它再次运行时停下来。
FYI:
由什么品牌,他们购买的源记录是相当恶心和拆分超过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)
循环,并跳过那些被发现已经迁移(否则,他们会得到重复的)任何行。
这似乎是一个循环给我的LOT。
那么我们什么时候开始记录40或50万记录呢?
这将是50k x 50k循环!
问:
有没有更好的办法,我来检查,如果子阵列具有“ROW_ID”和不是每次循环“source_tbl”比赛其他?
注:一如既往,如果有一个完全不同的方式我应该考虑这一点,我接受任何和所有的建议:)
你可能想看看http://stackoverflow.com/questions/163336/slicing-a-multi-dimensional-php-array-across-one-of-its-elements – Ian 2013-03-27 16:23:43
该链接让我的气味一些非常有用的信息。由于-A-一堆。 – mOrloff 2013-03-27 16:46:06