如何对具有相同键但不同敏感度的php数组求和

ebdffaop  于 2022-10-30  发布在  PHP
关注(0)|答案(3)|浏览(122)

我想对相同但大小写不同的键的值求和。
假设我们有一个数组

<?php 
$array = ['KEY'=> 5, ,'TEST' => 3,'Test' => 10,'Key'=> 2];
//---
a function to sum
//---

print_r($array);
/*
['KEY'] => 7,
['TEST'] => 13

* /

?>
vxqlmq5t

vxqlmq5t1#

循环键和值。将每个键转换为大写。在第二个数组中,将键/值设置为该数组中的当前值(如果不存在,则为0)加上循环中的值。
我使用空合并运算符??来确定数组键是否已设置,如果未设置,则使用值0。

$array = ['KEY'=> 5, 'TEST' => 3,'Test' => 10,'Key'=> 2];

$array2 = [];
foreach ( $array as $k => $v ) {
    $k = strtoupper($k);
    $array2[ $k ] = $v + ( $array2[$k] ?? 0 );
}

var_dump($array2);

结果:

array(2) {
  ["KEY"]=>
  int(7)
  ["TEST"]=>
  int(13)
}
chhkpiq4

chhkpiq42#

你可以使用foreach循环遍历每个数组项,当关键字不存在于sums数组中时使用isset设置新的计数。使用strtolowerstrtoupper将关键字转换为相同的大小写

function add_array_vals($arr) {
  $sums = [];
  foreach ( $arr as $key => $val ) {
    $key = strtoupper($key);
    if ( !isset($sums[$key]) ) {
      $sums[$key] = 0;
    }
    $sums[$key] = ( $sums[$key] + $val );
  }
  return $sums;
}

$array = ['KEY' => 5, 'TEST' => 3, 'Test' => 10, 'Key'=> 2];
$sums = add_array_vals($array);
var_dump($sums);

//Outputs
// KEY => int(7)
// TEST => int(13)
8ehkhllq

8ehkhllq3#

我找到了这个问题的答案:

<?php
$array = ['KEY'=> 5,'TEST' => 3,'Test' => 10,'Key'=> 2];
$final = array();
foreach($array as $key => $value){
    $final[strtoupper($key)] = ($final[strtoupper($key)] ?? 0)+$value;
}
print_r($final)
?>

相关问题