Php 数组组合保持索引

Php 数组组合保持索引,php,arrays,Php,Arrays,我试图将四个数组合并为一个,同时保留整个数组的索引号 示例阵列: $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

我试图将四个数组合并为一个,同时保留整个数组的索引号

示例阵列:

$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
      (
        [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
          )
      )

非常感谢您提供的所有帮助^ ^ ^

通常,数组ID的重置是由array ^ merge PHP函数引起的,而不是使用该函数尝试简单地“添加”数组以形成合并的数组,下面的示例应该有助于了解发生了什么

因此,我们从两个小而简单的数组开始,其索引设置为默认值0以外的值

$array1 = array(1 => 'one');
$array2 = array(3 => 'three');
使用“普通”数组\u merge可以执行类似的操作,因为您可以看到两个数组ID都已重置为0和1,其中在合并之前分别为1和3

$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');

我用这个定制的功能得到了这个。感谢Trey提供的原始函数,您可以使用此函数添加任意数量的数组

职能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');
$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( arrayMerge($codes, $names, $population, $area) );
print_r( arrayMerge2($keys, $codes, $names, $population, $area) );
我添加了两个自动数字索引,从0的1个instad开始

阵列输出示例:

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
      )
  )
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
      )
  )
这里还有一个使用自定义子键的方法,在这个方法中,我添加了一个自动命名索引,并从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');
$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( arrayMerge($codes, $names, $population, $area) );
print_r( arrayMerge2($keys, $codes, $names, $population, $area) );
阵列输出示例:

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
      )
  )
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阵列配置的人。

这将为您提供所需的精确输出。希望它对你有用

<?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);

你已经试过什么了吗?具体到哪里去了?源数组是什么样的?请看上面,我编辑了这篇文章。这不起作用,因为它没有像示例中所示的那样组合数组。我已经试过这种方法了。