2017-04-22 87 views
0

我有一個非常小的問題,但我只是無法修復這個問題。陣列的劃分問題在PHP

我有以下陣列:

Array 
(
    [0] => Array 
     (
      [Asset Address 1 Label] => 
      [Asset Address 1 Organization] => 
      [Asset Address 1 Name prefix] => Hotel Taj 
      [Asset Address 1 First name] => Maan 
      [Asset Address 1 Middle name] => Singh 
      [Asset Address 1 Last name] => Hotel 
      [Asset Address 1 Name suffix] => 
      [Asset Address 1 Street] => 
      [Asset Address 1 Street 2] => 
      [Asset Address 1 Zip/Postal Code] => 110020 
      [Asset Address 1 City] => 
      [Asset Address 1 State] => 
      [Asset Address 1 State Combined code] => IN-DL 
      [Asset Address 1 Country ISO2 code] => IN 
      [Asset Address 1 Types 1 Name] => billing 
      [Asset Address 1 Types 2 Name] => 
      [Asset Address 2 Label] => Himachal 
      [Asset Address 2 Organization] => 
      [Asset Address 2 Name prefix] => 
      [Asset Address 2 First name] => Hotel 
      [Asset Address 2 Middle name] => 
      [Asset Address 2 Last name] => Taj 
      [Asset Address 2 Name suffix] => 
      [Asset Address 2 Street] => 
      [Asset Address 2 Street 2] => 
      [Asset Address 2 Zip/Postal Code] => 110020 
      [Asset Address 2 City] => 
      [Asset Address 2 State] => 
      [Asset Address 2 State Combined code] => IN-CT 
      [Asset Address 2 Country ISO2 code] => IN 
      [Asset Address 2 Types 1 Name] => shipping 
      [Asset Address 2 Types 2 Name] => 
     ) 

) 

我試圖打破內部資產地址1 & 2到另一個空間陣列內

Array 
    (

    [0] => Array 
     (
     [0] => Array 
      (
      [Asset Address 1 Label] => asas 
      [Asset Address 1 Organization] => 
      [Asset Address 1 Name prefix] => 
      [Asset Address 1 First name] => asas 
      [Asset Address 1 Middle name] => asasas 
      [Asset Address 1 Last name] => asasa 
      [Asset Address 1 Name suffix] => asasa 
      [Asset Address 1 Street] => asasa 
      [Asset Address 1 Street 2] => 
      [Asset Address 1 Zip/Postal Code] => 121212 
      [Asset Address 1 City] => 
      [Asset Address 1 State] => 
      [Asset Address 1 State Combined code] => AO-CUS 
      [Asset Address 1 Country ISO2 code] => AO 
      [Asset Address 1 Types 1 Name] => billing 
      [Asset Address 1 Types 2 Name] => shipping 
      ) 
     [1] => Array 
      (
      [Asset Address 2 Label] => 
      [Asset Address 2 Organization] => 
      [Asset Address 2 Name prefix] => 
      [Asset Address 2 First name] => 
      [Asset Address 2 Middle name] => 
      [Asset Address 2 Last name] => 
      [Asset Address 2 Name suffix] => 
      [Asset Address 2 Street] => 
      [Asset Address 2 Street 2] => 
      [Asset Address 2 Zip/Postal Code] => 
      [Asset Address 2 City] => 
      [Asset Address 2 State] => 
      [Asset Address 2 State Combined code] => 
      [Asset Address 2 Country ISO2 code] => 
      [Asset Address 2 Types 1 Name] => 
      [Asset Address 2 Types 2 Name] => 
      ) 

     ) 

    ) 

請注意,因爲有在其他領域上述不顯示陣列,因此我不得不嘗試使用正則表達式如下過濾:

 $filtred = array(); 
     foreach($csv as $oldkey => $value){ 
      $regExpression = '/(Asset Address)['.$oldkey.'] [\w]+/'; 
      foreach ($value as $key => $value) { 
       if(preg_match($regExpression , $key)){ 
        $filtred[$oldkey][$key] = $value; 
       } 
      } 
     } 
     print_r($filtred); 

問題:

這不是從數組開始工作時,基本上是$oldkey 0會跳過工程$oldkey1。爲什麼?

而且,用這種方法我乾脆創建一個單獨的陣列,我想有作爲現有陣列中的額外的維度。

我希望我已經很好地解釋。

+0

當'$ oldkey'爲'0'時,正則表達式將爲'/(資產地址)[0] [\ w] + /'。有'0'的數組鍵嗎? – Deadooshka

+0

哦,真是太傻了,好吧,我添加了$ oldkey + 1,它已經開始接受資產地址1&2。謝謝! – Aayush

+0

@Deadooshka問題1解決了,關於如何將現有地址字段替換爲同一數組中的多維數組的任何想法? – Aayush

回答

0

嘗試下面的代碼格式化爲您上面提到。

$filtred = array(); 
$n = 1; 
foreach($csv as $oldkey => $values){ 
    $i = 0; $j = 0; 
    foreach (array_keys($values) as $key => $value) { 
     if(!preg_match('/(Asset Address)['.$n.'] [\w]+/' , $value)){ 
      $n++; $j++; 
     } 
     $filtred[$i][$j][$value] = $values[$value]; 
    } 
    $i++; 
}