无法在php中添加相同数组的值?
我有一个包含数组的以下数据。我想做的是,如果 访客日、访客id和类型相同。如果您看到下面的代码,就好像数组6和13具有相同的数据,而数组23和36也具有相同的数据。我只想简单地将visitor_cs的值相加为2。但我不知道如何才能做到这一点。我很想听到你的消息无法在php中添加相同数组的值?,php,arrays,logic,Php,Arrays,Logic,我有一个包含数组的以下数据。我想做的是,如果 访客日、访客id和类型相同。如果您看到下面的代码,就好像数组6和13具有相同的数据,而数组23和36也具有相同的数据。我只想简单地将visitor_cs的值相加为2。但我不知道如何才能做到这一点。我很想听到你的消息 Array ( [6] => Array ( [type] => mail [visitor_id] => 4 [visit
Array
(
[6] => Array
(
[type] => mail
[visitor_id] => 4
[visitor_day] => 20180516
[visitor_cv] => 1
)
[13] => Array
(
[type] => mail
[visitor_id] => 4
[visitor_day] => 20180516
[visitor_cv] => 1
)
[23] => Array
(
[type] => skype
[visitor_id] => 4
[visitor_day] => 20180516
[visitor_cv] => 1
)
[36] => Array
(
[type] => skype
[visitor_id] => 4
[visitor_day] => 20180516
[visitor_cv] => 1
)
我希望上面的结果是这样的
Array
(
[type] => mail
[visitor_id] => 4
[visitor_day] => 20180516
[visitor_cv] => 2
)
Array
(
[type] => skype
[visitor_id] => 4
[visitor_day] => 20180516
[visitor_cv] => 2
)
执行此操作的一个选项是基于
类型
、访客id
和访客日
创建一个数组键,然后对访客简历
求和:
$items = [
["type" => "mail", "visitor_id" => 4 ,"visitor_day" => 20180516, "visitor_cv" => 1],
["type" => "mail", "visitor_id" => 4, "visitor_day" => 20180516, "visitor_cv" => 1],
["type" => "skype", "visitor_id" => 4, "visitor_day" => 20180516,"visitor_cv" => 1],
["type" => "skype", "visitor_id" => 4, "visitor_day" => 20180516, "visitor_cv" => 1]
];
$result = [];
foreach ($items as $item) {
$key = $item["type"] . $item["visitor_id"] . $item["visitor_day"];
if (!array_key_exists($key, $result)) {
$result[$key] = $item;
continue;
}
$result[$key]["visitor_cv"] += $item["visitor_cv"];
}
执行此操作的一个选项是基于
类型
、访客id
和访客日
创建一个数组键,然后将访客cv
相加:
$items = [
["type" => "mail", "visitor_id" => 4 ,"visitor_day" => 20180516, "visitor_cv" => 1],
["type" => "mail", "visitor_id" => 4, "visitor_day" => 20180516, "visitor_cv" => 1],
["type" => "skype", "visitor_id" => 4, "visitor_day" => 20180516,"visitor_cv" => 1],
["type" => "skype", "visitor_id" => 4, "visitor_day" => 20180516, "visitor_cv" => 1]
];
$result = [];
foreach ($items as $item) {
$key = $item["type"] . $item["visitor_id"] . $item["visitor_day"];
if (!array_key_exists($key, $result)) {
$result[$key] = $item;
continue;
}
$result[$key]["visitor_cv"] += $item["visitor_cv"];
}
我创建了这个函数,它包含一个数组和要作为数组检查的键, 然后,它通过连接键值来创建一个值,并将它们放入一个数组中,以便稍后检查该值是否存在,如果存在,则跳过,否则将该值放入名为tempArray的结果数组中,然后将其作为结果返回
function arrayUnique($array, $keys) {
$tempArray = [];
$keyArray = [];
foreach($array as $val) {
$keysValue = '';
foreach($keys as $key) {
$keysValue .= $val[$key];
}
if(!in_array($keysValue, $keyArray)) {
$keyArray[] = $keysValue;
$tempArray[] = $val;
}
}
return $tempArray;
}
$a = [
['name' => 'hassan', 'age' => 2, 'test' => 1],
['name' => 'hassan', 'age' => 1, 'test' => 1],
['name' => 'ali', 'age' => 2, 'test' => 1]
];
var_dump(arrayUnique($a, ['age', 'test']));
我创建了这个函数,它包含一个数组和要作为数组检查的键, 然后,它通过连接键值来创建一个值,并将它们放入一个数组中,以便稍后检查该值是否存在,如果存在,则跳过,否则将该值放入名为tempArray的结果数组中,然后将其作为结果返回
function arrayUnique($array, $keys) {
$tempArray = [];
$keyArray = [];
foreach($array as $val) {
$keysValue = '';
foreach($keys as $key) {
$keysValue .= $val[$key];
}
if(!in_array($keysValue, $keyArray)) {
$keyArray[] = $keysValue;
$tempArray[] = $val;
}
}
return $tempArray;
}
$a = [
['name' => 'hassan', 'age' => 2, 'test' => 1],
['name' => 'hassan', 'age' => 1, 'test' => 1],
['name' => 'ali', 'age' => 2, 'test' => 1]
];
var_dump(arrayUnique($a, ['age', 'test']));
您的数据来源是什么?例如,如果使用数据库,则可以“分组方式”。如果您不确定,我建议从简单的for/foreach循环开始,手动排序并添加到最终数组中。您的数据来源是什么?例如,如果使用数据库,则可以“分组方式”。如果您不确定,我建议从简单的for/foreach循环开始,手动排序并添加到最终数组中。