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