我想对相同但大小写不同的键的值求和。假设我们有一个数组
<?php $array = ['KEY'=> 5, ,'TEST' => 3,'Test' => 10,'Key'=> 2]; //--- a function to sum //--- print_r($array); /* ['KEY'] => 7, ['TEST'] => 13 * / ?>
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) }
chhkpiq42#
你可以使用foreach循环遍历每个数组项,当关键字不存在于sums数组中时使用isset设置新的计数。使用strtolower或strtoupper将关键字转换为相同的大小写
foreach
isset
strtolower
strtoupper
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)
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) ?>
3条答案
按热度按时间vxqlmq5t1#
循环键和值。将每个键转换为大写。在第二个数组中,将键/值设置为该数组中的当前值(如果不存在,则为0)加上循环中的值。
我使用空合并运算符
??
来确定数组键是否已设置,如果未设置,则使用值0。结果:
chhkpiq42#
你可以使用
foreach
循环遍历每个数组项,当关键字不存在于sums数组中时使用isset
设置新的计数。使用strtolower
或strtoupper
将关键字转换为相同的大小写8ehkhllq3#
我找到了这个问题的答案: