簡體   English   中英

PHP多維數組:查找多元素子數組匹配...是否有循環的備用選項?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM