2017-04-22 108 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++; 
}