我有一个从表单发布的多维值数组,我试图不只是去掉它们,而是将重复数组中的值相加,以便这些值可以作为一个更大的值发布。
发布的数组如下:
Array
(
[0] => Array
(
[0] => 4
[1] => 27/11/2013
)
[1] => Array
(
[0] => 4
[1] => 27/11/2013
)
[2] => Array
(
[0] => 2
[1] =>
)
[3] => Array
(
[0] => 2
[1] =>
)
)
对于每个子数组,值0是数量,值1是日期(可选)。数组中的最后一个条目是2的数量,空白日期是自动添加的,因为所需的总数是12。
然后我使用foreach循环(下面)查看子数组以检查重复日期。
foreach ($qty_date_array as $key => $value)
{
if(in_array($value[1], $exists) && !in_array($value[1], $duplicates))
{
$duplicates[] = $value[1];
}
else
{
$exists[] = $value[1];
}
$ duplicates的输出是......
Array
(
[0] => 27/11/2013
[1] =>
)
我想我想看一下数组中的值和foreach,找到相关的原始数值并求它们,但我不知道如何继续进行。
Array_search只会返回密钥,所以我猜这是不对的(我不能将Qty写为密钥,因为它可能是一个重复的值)。我已经涉足的其他数组函数,例如array_unique,根据索引折叠数组,因此丢失数据。
理想情况下,最终的多维数组看起来像这样:
Array
(
[0] => Array
(
[0] => 8
[1] => 27/11/2013
)
[2] => Array
(
[0] => 4
[1] =>
)
)
如果有人能提出更有效的方法来实现这一目标,我愿意接受所有建议!
答案 0 :(得分:0)
如果缺少“可选”日期值,那么值是什么 - 只是NULL或空字符串?
如果是这样,这样的事情将起作用:首先使用日期作为关键字来汇总临时数组中的数据;然后将其转换为所需格式的数组:
$temp_data = $new_data = array();
foreach($data as $val) { // $data would be your original array here
if(isset($temp_data[$val[1]])) { // if entry for date already exists,
$temp_data[$val[1]] += $val[0]; // add value to existing sum for that date
}
else {
$temp_data[$val[1]] = $val[0]; // otherwise put it in as new value for date
}
}
foreach($temp_data as $key => $val) { // create numerically indexed array,
$new_data[] = array($val, $key); // using key (date) as item 0
} // and summed up value as item 1
答案 1 :(得分:0)
$tmp = array();
foreach($data as $key => $value){
if(isset($tmp[$value[1]])){
$tmp[$value[1]][0] += $value[0];
}else{
$tmp[$value[1]] = $value;
}
}
$data = array_values($tmp);