Php 用相同的值修改数组

Php 用相同的值修改数组,php,arrays,multidimensional-array,cakephp-2.1,Php,Arrays,Multidimensional Array,Cakephp 2.1,我有如下二维数组 array( 0 => array( 0 => 'India', 1 => '91' ), 1 => array( 0 => 'Australia', 1 => '1' ), 2 => array( 0 => 'India', 1 => '20' ), 3 => array( 0 => 'Iraq', 1 => '10' ), 4 =>

我有如下二维数组

array(
0 => array(
    0 => 'India',
    1 => '91'
),
1 => array(
    0 => 'Australia',
    1 => '1'
),
2 => array(
    0 => 'India',
    1 => '20'
),
3 => array(
    0 => 'Iraq',
    1 => '10'
),
4 => array(
    0 => 'Australia',
    1 => '3'
),
    5 => array(
    0 => 'Kuweit',
    1 => '14'
)
)
如果存在相同的内部数组值,我希望将其合并,以便添加。。 所以我想把这个数组放到下面的数组中

  array(
 0 => array(
   0 => 'India',
   1 => 111
 ),
 1 => array(
   0 => 'Australia',
   1 => 4
 ),
 2 => array(
   0 => 'Iraq',
   1 => 10
 ),
 3 => array(
   0 => 'Kuweit',
   1 => 14
 )
)

如何获取该数组?

我将迭代该数组,并将所有内容放入一个新的(临时)关联数组中。 在这个临时数组中,我将使用(标识)名称作为键,使用附加信息作为值。 这样你就没有重复的了

在迭代过程中,您可以调用array_key_exists来确定临时数组中的名称是否已知,如果已知,您可以将这两个数字的总和存储在临时数组中

示例(未验证;假设第一个数组存储在$inputArray中)


我将迭代数组并将所有内容放入新的(临时)关联数组中。
在这个临时数组中,我将使用(标识)名称作为键,使用附加信息作为值。
这样你就没有重复的了

在迭代过程中,您可以调用array_key_exists来确定临时数组中的名称是否已知,如果已知,您可以将这两个数字的总和存储在临时数组中

示例(未验证;假设第一个数组存储在$inputArray中)


迭代数组,将其转换为关联数组(使用国家名称作为键),然后将其转换回数字索引数组

这可以通过以下方式很好地实现:


运行时复杂性应为O(n)(您只需迭代两次)

迭代数组,将其转换为关联数组(使用国家名称作为键),然后将其转换回数字索引数组

这可以通过以下方式很好地实现:


运行时复杂性应该是O(n)(您只需迭代两次)

knittl的答案更简洁,但您可以遵循如下相同的开始:

// $in = source array in your question ... 

/* collect the totals */
$collect = array();
foreach ($in as $item)
{
    if (array_key_exists($item[0], $collect))
    {
        $collect[$item[0]] += $item[1];
    }
    else
    {
        $collect[$item[0]] = (int) $item[1];
    }
}

/* repackage the result */
$out = array();
foreach ($collect as $key => $value)
{
    $out[] = array($key, $value);
}

knittl的回答更简洁,但你可以遵循同样的原则,如:

// $in = source array in your question ... 

/* collect the totals */
$collect = array();
foreach ($in as $item)
{
    if (array_key_exists($item[0], $collect))
    {
        $collect[$item[0]] += $item[1];
    }
    else
    {
        $collect[$item[0]] = (int) $item[1];
    }
}

/* repackage the result */
$out = array();
foreach ($collect as $key => $value)
{
    $out[] = array($key, $value);
}

不需要使用
(int)
强制转换,而且由于数组是基于零索引的,因此不需要使用
X=>Y
语法。如果删除这些,代码将更具可读性,并且很可能吸引到答案。不需要使用
(int)
强制转换,而且由于数组是基于零索引的,因此不需要使用
X=>Y
语法。如果删除这些,代码将更具可读性,并且很可能吸引到答案。
// $in = source array in your question ... 

/* collect the totals */
$collect = array();
foreach ($in as $item)
{
    if (array_key_exists($item[0], $collect))
    {
        $collect[$item[0]] += $item[1];
    }
    else
    {
        $collect[$item[0]] = (int) $item[1];
    }
}

/* repackage the result */
$out = array();
foreach ($collect as $key => $value)
{
    $out[] = array($key, $value);
}