2013-07-06 49 views
1

我試圖將四個數組合併成一個,同時保留整個數組的索引號。Array Combine保留索引

實例陣列:

$codes = array('US', 'GB', 'AE'); 
$names = array('United States', 'United Kingdom', 'United Arab Emirates'); 
$population = array('307,212,123', '61,113,205', '4,798,491'); 
$area = array('9,826,675', '243,610', '83,600'); 

我想有可能是這樣使用的功能:

此外,如果可能的話,更多的陣列像第五等的支持...

$country = combineArray($codes, $names, $population, $area); 

結果通緝:

[country] => Array 
     (
     [0] => Array 
      (
      [0] => US 
      [1] => United States 
      [2] => 307,212,123 
      [3] => 9,826,675 
     ) 
     [1] => Array 
      (
      [0] => GB 
      [1] => United Kingdom 
      [2] => 61,113,205 
      [3] => 243,610 
     ) 
     [2] => Array 
      (
      [0] => AE 
      [1] => United Arab Emirates 
      [2] => 4,798,491 
      [3] => 83,600 
     ) 
    ) 

非常感謝你的所有幫助^ _^

+0

你已經試過了什麼嗎?你在哪裏陷入特定? – PeeHaa

+0

什麼是源數組? –

+0

請參閱上文,我已編輯帖子。 – Tux

回答

0

我這個自定義功能這方面的工作。感謝Trey在「array combine three or more arrays with php」的原始功能,您可以根據您的需要添加任意數量的陣列。

功能#1:

function arrayMerge() { 
    $args = func_get_args(); 
    $idx1 = range(1, count($args[1])); 
    $idx2 = range(1, count($args[2])); 
    foreach($args as $key => $array) { 
     $vkey = array_shift($idx2); 
     foreach($array as $akey => $val) { 
      $result[$idx1[$akey]][$vkey] = $val; 
     } #foreach 
    } #foreach 
    return $result; 
} #arrayMerge 

示例陣列使用:

$codes = array('US', 'GB', 'AE'); 
$names = array('United States', 'United Kingdom', 'United Arab Emirates'); 
$population = array('307,212,123', '61,113,205', '4,798,491'); 
$area = array('9,826,675', '243,610', '83,600'); 

功能用途:

print_r(arrayMerge($codes, $names, $population, $area)); 

我已經添加了兩個自動數字索引的,並從1個instad的開始0.

實施例陣列輸出:

Array 
    (
    [1] => Array 
     (
     [1] => US 
     [2] => United States 
     [3] => 307,212,123 
     [4] => 9,826,675 
    ) 
    [2] => Array 
     (
     [1] => GB 
     [2] => United Kingdom 
     [3] => 61,113,205 
     [4] => 243,610 
    ) 
    [3] => Array 
     (
     [1] => AE 
     [2] => United Arab Emirates 
     [3] => 4,798,491 
     [4] => 83,600 
    ) 
) 

下面是一個更該自定義使用子密鑰,在這一個我添加一個自動nameric索引和從1而不是0開始。

功能#2:

function arrayMerge2() { 
    $args = func_get_args(); 
    $idx = range(1, count($args[1])); 
    $keys = array_shift($args); 
    foreach($args as $key => $array) { 
     $vkey = array_shift($keys); 
     foreach($array as $akey => $val) { 
      $result[$idx[$akey]][$vkey] = $val; 
     } #foreach 
    } #foreach 
    return $result; 
} #arrayMerge2 

實例陣列被使用:

$codes = array('US', 'GB', 'AE'); 
$names = array('United States', 'United Kingdom', 'United Arab Emirates'); 
$population = array('307,212,123', '61,113,205', '4,798,491'); 
$area = array('9,826,675', '243,610', '83,600'); 
$keys = array('code', 'name', 'popu', 'area'); 

功能用途:

print_r(arrayMerge2($keys, $codes, $names, $population, $area)); 

例陣列輸出:

Array 
    (
    [1] => Array 
     (
     [code] => US 
     [name] => United States 
     [popu] => 307,212,123 
     [area] => 9,826,675 
    ) 
    [2] => Array 
     (
     [code] => GB 
     [name] => United Kingdom 
     [popu] => 61,113,205 
     [area] => 243,610 
    ) 
    [3] => Array 
     (
     [code] => AE 
     [name] => United Arab Emirates 
     [popu] => 4,798,491 
     [area] => 83,600 
    ) 
) 

噢,這個功能也支持空值數組 :-)

我希望這可以幫助另外一個人需要simular陣列配置。

0

通常陣列的復位ID的由array_merge PHP函數造成的,而不是使用盡量簡單的「添加」的陣列形成的合併陣列,這裏有一個應該幫助提供一些理解的例子。

所以我們從索引設置爲默認值(0)以外的兩個小而簡單的數組開始。

$array1 = array(1 => 'one'); 
$array2 = array(3 => 'three'); 

使用「正常」 array_merge會做這樣的事情,你可以看到在合併之前分別的被重置爲0和1,在那裏,因爲他們是1和3兩個陣列ID。

$mergedArray = array_merge($array1, $array2); 
// $mergedArray = array(0 => 'one', 1 => 'three'); 

但是當你將兩個陣列可以索引的ID將保持不變:

$mergedArray = $array1 + $array2; // will keep the index ID's intact 
// $mergedArray = array(1 => 'one', 3 => 'three'); 
+0

這將不起作用,因爲它不像示例中所示組合陣列。我已經試過這個問題了。 – Tux

0

這會給你確切的輸出你需要的東西。希望它對你有用。

<?php 
$codes = array('US', 'GB', 'AE'); 
$names = array('United States', 'United Kingdom', 'United Arab Emirates'); 
$population = array('307,212,123', '61,113,205', '4,798,491'); 
$area = array('9,826,675', '243,610', '83,600'); 

$country = array(); 
$size= sizeof($codes); //This will work only if all array size are same. 

for($i=0;$i<$size;$i++) 
{ 
    $country[$i][]=$codes[$i]; 
    $country[$i][]=$names[$i]; 
    $country[$i][]=$population[$i]; 
    $country[$i][]=$area[$i]; 
} 
echo "<pre>"; 
print_r($country); 
+0

我喜歡上面的自定義函數:)但謝謝。 – Tux