我們有一些客戶數據在一個單獨的數據存儲區中啓動。我有一個合併腳本來標準化並將其遷移到我們的核心數據庫中。有大約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