繁体   English   中英

对多维数组中的唯一值进行分组

[英]group unique values in multidimensional array

我有一系列的 RestroreModels

如果 RestoreCode 值在数组中多次存在。 基于唯一的恢复,我想添加 TotalCharge 值并将与该 RestoreCode 关联的模型放在一个新数组中。 如果 RestoreCode 值仅存在一次,则将其与数组中的单个模型原样放置。

$RestroreModels =  array (
    0 => 
    array (
      'TotalCharge' => '3',
      'RestoreCode' => 'FF 0',
      'Model' => 'iPhone 7',
    ),
    1 => 
    array (
      'TotalCharge' => '2',
      'RestoreCode' => 'LT 2015',
      'Model' => 'iPad Mini 2',
    ),
    2 => 
    array (
      'TotalCharge' => '2',
      'RestoreCode' => 'LT 4013',
      'Model' => 'iPhone 6',
    ),
    3 => 
    array (
      'TotalCharge' => '2',
      'RestoreCode' => 'LT 4013',
      'Model' => 'ipod touch',
    ),
    4 => 
    array (
      'TotalCharge' => '2',
      'RestoreCode' => 'P 21',
      'Model' => 'iPhone 7',
    ),
    5 => 
    array (
      'TotalCharge' => '2',
      'RestoreCode' => 'AL 2015',
      'Model' => 'iPhone 7',
    ),
    6 => 
    array (
      'TotalCharge' => '2',
      'RestoreCode' => 'AL 0',
      'Model' => 'ipod touch',
    ),
    7 => 
    array (
      'TotalCharge' => '1',
      'RestoreCode' => 'LT 2015',
      'Model' => 'iPad Mini',
    ),
    8 => 
    array (
      'TotalCharge' => '1',
      'RestoreCode' => 'LT 4005',
      'Model' => 'iPad Mini',
    ),
    9 => 
    array (
      'TotalCharge' => '1',
      'RestoreCode' => 'P 21',
      'Model' => 'iPad 5',
    ),
    10 => 
     array (
      'TotalCharge' => '1',
      'RestoreCode' => 'LT 4013',
      'Model' => 'iPhone 7+',
    )
  );


我想要这样的结果

$RestroreModels  =  array (

    0 => 
     array (
      'TotalCharge' => '4',
      'RestoreCode' => 'LT 2015',
      'Model' => array ('iPad Mini 2', 'iPhone 7')
    ),
    1 => 
     array (
      'TotalCharge' => '3',
      'RestoreCode' => 'LT 4013',
      'Model' => array ('iPhone 7+', 'ipod touch', 'iPad Mini 2')
    ),
    2 => 
    array (
      'TotalCharge' => '3',
      'RestoreCode' => 'P 21',
      'Model' => array ('iPad Mini 2', 'iPhone 7', 'iPad 5')
    ),
    3 => 
    array (
      'TotalCharge' => '2',
      'RestoreCode' => 'AL 2015',
      'Model' => array ('iPhone 7'), 
    ),
    4 => 
    array (
      'TotalCharge' => '2',
      'RestoreCode' => 'AL 0',
      'Model' => array ('ipod touch'), 
    ),
    5 => 
    array (
      'TotalCharge' => '1',
      'RestoreCode' => 'LT 4005',
      'Model' => array ('iPad Mini'), 
    ),
  );

到目前为止,我已经尝试过这个我能够获得唯一值,但不确定如何添加添加 TotalCharge 并将与 RestoreCode 相关的模型放入 $final_array 中。

$final_array = array();
$keys_array = array();

foreach ($RestroreModels as $key => $value) {
    if (!in_array($value['RestoreCode'], $keys_array)) {
        $keys_array[$key]       =  $value['RestoreCode'];
        $final_array[$key]      =  $value;
    }

}



var_dump ($final_array);
die();

请注意, if the RestoreCode value exist only once put as it is with single model in array ,我认为您可能会使用 foreach 循环并将单个数组的RestoreCode存储为结果数组中的键。 请注意,结果将与您想要的结果不同,因为具有单个 RestoreCode 的项目也将出现在结果中。

每次迭代检查该键是否已存在。 如果没有,则添加它并将模型的值放入新数组中。

如果确实存在,请添加TotalCharge的值。 要获得唯一值的模型,检查当前阵列Model已经包含它。

如果要重置键,可以使用array_values

$res = [];

foreach ($RestroreModels as $item) {
    if (isset($res[$item["RestoreCode"]])) {
        if (!in_array($item["Model"], $res[$item["RestoreCode"]]["Model"], true)) {
            $res[$item["RestoreCode"]]["Model"][] = $item["Model"];
        }
        $res[$item["RestoreCode"]]["TotalCharge"] += $item["TotalCharge"];

    } else {
        $item["Model"] = [$item["Model"]];
        $res[$item["RestoreCode"]] = $item;
    }
}

print_r(array_values($res));

php 演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM