请在下面的代码示例中找到用于在内部数组内添加重复值的代码。谁能建议一种更快地添加值的替代方法?该代码将适用于较小的数组,但是我想添加包含大量数据的大型数组。我也想增加执行时间。
<?php
$testArry = array();
$testArry[0] = array(
"text" => "AB",
"count" => 2
);
$testArry[1] = array(
"text" => "AB",
"count" => 5
);
$testArry[2] = array(
"text" => "BC",
"count" => 1
);
$testArry[3] = array(
"text" => "BD",
"count" => 1
);
$testArry[4] = array(
"text" => "BC",
"count" => 7
);
$testArry[5] = array(
"text" => "AB",
"count" => 6
);
$testArry[6] = array(
"text" => "AB",
"count" => 2
);
$testArry[7] = array(
"text" => "BD",
"count" => 111
);
$match_key = array();
$final = array();
foreach ($testArry as $current_key => $current_array) {
$match_key = array();
foreach ($testArry as $search_key => $search_array) {
$key = '';
if ($search_array['text'] == $current_array['text']) {
$match_key[] = $search_key;
$key = $search_array['text'];
if (isset($final[$key])) {
$final[$key] += $search_array['count'];
} else {
$final[$key] = $search_array['count'];
}
}
}
for ($j = 0; $j < count($match_key); $j++) {
unset($testArry[$match_key[$j]]);
}
}
print_r($final);
?>
是否在执行期间添加内存?
谢谢。
答案 0 :(得分:0)
一个array_walk足以解决您的问题,
$final = [];
array_walk($testArry, function($item) use(&$final){
$final[$item['text']] = (!empty($final[$item['text']]) ? $final[$item['text']] : 0) + $item['count'];
});
print_r($final);
输出
Array
(
[AB] => 15
[BC] => 8
[BD] => 112
)
array_walk —将用户提供的函数应用于数组的每个成员
答案 1 :(得分:0)
array_map()-将回调应用于给定数组的元素
array_key_exists()-检查数组中是否存在给定的键或索引
您可以使用 array_walk
和 array_key_exists
遍历数组元素,并将具有相同文本索引的元素相加
$res = [];
array_map(function($v) use (&$res){
array_key_exists($v['text'], $res) ? ($res[$v['text']] += $v['count']) : ($res[$v['text']] = $v['count']);
}, $testArry);