我到处找过了,我已经无计可施了,所以我会让这件事变得简单。这是我在一个print_r:中得到的
Array
(
[0] => Array
(
[name] => client interaction
[y] => 2.7
)
[1] => Array
(
[name] => client interaction
[y] => 0.1
)
[2] => Array
(
[name] => project planning
[y] => 0.1
)
[3] => Array
(
[name] => client interaction
[y] => 5.9
)
)
这就是我想要的:
Array
(
[0] => Array
(
[name] => client interaction
[y] => 8.7
)
[1] => Array
(
[name] => project planning
[y] => 0.1
)
)
您所需的数组是否绝对需要使用数字索引?如果我要这样做,我会这样做(虽然与你想要的阵列不同(
$newArray = array();
foreach($array as $item)
{
if(!isset($newArray[$item["name"]]))
$newArray[$item["name"]] = 0;
$newArray[$item["name"]] += $item["y"];
}
这将给你一个这种结构的数组:
Array
(
[client interaction] => 8.7
[project planning] => 0.1
)
要取回密钥,只需使用foreach
循环的第二种形式
foreach($newArray as $name => $y)
$name
将包含原始数组中的name
和$y
y
。
$hash = array();
foreach ($sourceArray as $key=>$value) {
$y = 0;
if (isset($hash{$value{'name'}})) {
$y = $hash{$value{'name'}};
}
$hash{$value{'name'}} = $y + $value{'y'};
}
$result = array();
foreach ($hash as $key => $value) {
$result[] = array( 'name' => $key, 'value' => $value );
}
print_r($result);
最后一个循环只是将$hash
转换为您指定的确切格式。
说明:
$hash
是一个临时结构,用于计算每个唯一名称的总和。
foreach ($sourceArray as $key=>$value) {
这将遍历您的原始数组($sourceArray(并提取每个元素。
$y = 0;
初始化变量以存储属于该名称的当前和。
if (isset($hash{$value{'name'}})) {
检查给定名称的值是否已存储在$hash
中。
$y = $hash{$value{'name'}};
}
将$y设置为先前为给定名称计算的总和(如果有(。
$hash{$value{'name'}} = $y + $value{'y'};
}
将给定名称的总和存储到我们的临时结构$hash
中。
$result = array();
foreach ($hash as $key => $value) {
$result[] = array( 'name' => $key, 'value' => $value );
}
将$hash转换为所需格式。
$result[] = ...
中的empy[]将表达式的右侧添加到$result
数组的末尾。
$mixed = array(); // Should contain your array shown above
$groups = array();
$newArray = array(); // Will contain your new array
$counter = 0;
foreach( $mixed as $mix )
{
if ( isset($groups[$mix['name']]) )
{
$newArray[$groups[$mix['name']]]['y'] += $mix['y'];
}
else
{
$groups[$mix['name']] = $counter;
$newArray[] = $mix;
$counter++;
}
}
http://codepad.org/EjdHxgvt