[英]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.