【发布时间】:2014-11-06 14:19:28
【问题描述】:
我有多维数组:
$array = array(
array(
"id" => 1,
"value" => 100
),
array(
"id" => 1,
"value" => 200
),
array(
"id" => 1,
"value" => 300
),
array(
"id" => 2,
"value" => 2
),
array(
"id" => 2,
"value" => 5
),
array(
"id" => 3,
"value" => 10.50
),
);
我需要获取新的多维数组,像这样:
$newArray = array(
array(
"id" => "1",
"sum_of_values" => 600
),
array(
"id" => 2,
"sum_of_values" => 7
),
array(
"id" => 3,
"sum_of_values" => 10.50
),
);
我的意思是,键 [sum_of_values] 应该计算具有相同键 [id] 的子数组中的值。
我试过了:
$cnt = count($array);
$finalArray = array();
$tempArray = array();
for($i = 0; $i < $cnt; $i++){
if($array[$i]["id"] == $array[$i++]["id"]){
$search = $array[$i]["id"];
$column = "value";
$sum = array_sum(
array_map(
function($data) use ($column) {
return $data[$column];
},
array_filter(
$array,
function($data) use ($search) {
return fnmatch($search, $data["id"]);
}
)
)
);
$tempArray = array(
"id" => $array[$i]["id"],
"sum_of_values" => $sum
);
$finalArray[] = $tempArray;
} else {
$tempArray = array(
"id" => $array[$i]["id"],
"sum_of_values" => $array[$i]["value"]
);
}
}
它有效,它计算具有相同 [id] 的子数组的值。但问题不在于返回子数组,其中的键 [id] 没有相同的示例。在我的情况下 - [id] = 3 的子数组将不会返回。此外,[id] = 1 和 [id] = 2 的子数组将重复 [n-n/2] 次。
我认为,问题在于使用循环 - for ($i = 0; $i < $cnt; $i++) 和条件 if ($array[$i]["id"] == $array[$i++]["id"]),因为它看起来很愚蠢,但我找不到其他任何东西。
【问题讨论】:
标签: php arrays multidimensional-array