PHP在多维数组内添加值

时间:2019-04-30 10:06:01

标签: php arrays

请在下面的代码示例中找到用于在内部数组内添加重复值的代码。谁能建议一种更快地添加值的替代方法?该代码将适用于较小的数组,但是我想添加包含大量数据的大型数组。我也想增加执行时间。

<?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);
 ?> 

是否在执行期间添加内存?

谢谢。

2 个答案:

答案 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
)

Demo

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);