2012-11-09 109 views
3

我有一個看起來像這樣的數組數據:轉換複雜的數值數組關聯數組

Array (
    [0] => Array (
     [0] => Name: 
     [1] => John W. 
     [2] => Registration ID: 
     [3] => 36 
    ) 
    [1] => Array (
     [0] =>Age: 
     [1] => 35 
     [2] => Height: 
     [3] => 5'11" 
    ) 
    [3] => Array (
     [0] => Sex: 
     [1] => M 
     [2] => Weight: 
     [3] => 200lbs 
    ) 
    [4] => Array (
     [0] => Address 
    ) 
    [5] => Array (
     [0] => 6824 crestwood dr delphi, IN 46923 
    )) 

我想將其轉換爲關聯數組是這樣的:

Array(
    ['Name']=> John W. 
    ['Registration ID']=> 36 
    ['Age']=> 35 
    ['Height'] => 5'11'' 
    ['Sex']=>M 
    ['Weight']=>200lbs 
    ['Address']=>6824 crestwood dr delphi, IN 46923 
) 

我不知道在所有如何做到這一點,因爲應該是數組列標題也順序,所以它很難轉換這個數組。

任何幫助我明白,thx。

回答

2

鑑於你的出身數組被稱爲$origin,你可以做這樣的:

$merged = array(); 
foreach($origin as $val) { 
    $merged = array_merge($merged, $val); 
} 
$tot = count($merged) - 1; 
for ($i=0;$i<$tot;$i+=2) { 
    $result[$merged[$i]] = $merged[$i+1]; 
} 

var_dump($result); // To test the resulting array 

首先,我用array_merge()拼合$origin陣列只有一個尺寸/深度,所以我們後來重複它(步每個迭代每2個項目)並將每對項目($i$i+1)分配給結果數組。

+0

非常感謝你的工作。爲什麼我不能想出這個簡單的方法? Thx再次。 – teakay

+0

不客氣! :-) – Nelson

1

看起來,對於前3個孩子,您可以將偶數值指定爲前一個元素作爲鍵。然後,將第四個元素指定爲第五個元素的鍵。

$result = array(); 
    foreach ($array as $key => $value) 
    { 
     if ($key < 4) { 
      $elements = array_values($value); 
      $result[$elements[0]] = $elements[1]; 
      $result[$elements[2]] = $elements[3]; 
     } 

     if ($key == 4) 
      $fifthkey = $value; 

     if ($key == 5) 
      $result[$fifthkey] = $value; 
    } 

此外,請注意,您必須轉義您的高度字符串引號。

+0

謝謝你的解決方案,但實際上數據比我上面寫的數據要大,所以我認爲如果我定義哪個孩子是關鍵,哪個孩子是相關值,效率就不高。 – teakay