我有一个如下所示的数组,我想将它们的非整数重复值作为与索引键关联的一个值,并在一个新索引中加上其下一个索引中的整数值。一个不是重复的,只需将它们排序在同一数组中即可。
我拥有的数据数组
Array
(
[0] => class 1
[1] => 10
[2] => class 1
[3] => 10
[4] => class 2
[5] => 30
[6] => late fine
[7] => 50
[8] => late fine
[9] => 100
)
我想要的方式
Array
(
[0] => class 1
[1] => 20
[2] => class 2
[3] => 30
[4] => late fine
[5] => 150
)
代码
$i=0; $x=0; $rec = array();
while($i < count($data)){
while($x < count($data)){
if($data[$i] == $data[$x]){
$rec[] = $data[$i];
}
$x++;
}
$i++;
}
答案 0 :(得分:2)
我不知道为什么您要结束一个值数组,其中每个其他值都应代表前一个值的总和。
如果我是你,我会将它们排序为KV数组,如下所示:
$summed_array = [];
$array = [
'class 1',
40,
'class 1',
10,
'class 2',
20,
'test 1',
20,
'test 1',
40
]; // Your array
for( $i = 0; $i<count($array); $i++ ){
// Do the following procedure for every other instance
if( $i % 2 == 0 ){
$summed_array[$array[$i]] = array_key_exists( $array[$i], $summed_array ) ? ( $summed_array[$array[$i]] + $array[$i+1] ) : $array[$i+1];
}
}
这将为您提供如下输出:
Array ( [class 1] => 50 [class 2] => 20 [test 1] => 60 )
答案 1 :(得分:2)
我同意Ole Haugset,但是由于您坚持采用顺序结果,因此以下解决方案可以做到这一点:
$data = [
'class 1',
10,
'class 1',
10,
'class 2',
30,
'late fine',
50,
'late fine',
100
];
$temp = [];
foreach( array_chunk( $data, 2 ) as list( $key, $value ) ) {
$temp[ $key ] = isset( $temp[ $key ] ) ? $temp[ $key ] + $value : $value;
}
// until here it was basically similar to Ole's solution
$result = [];
foreach( $temp as $key => $value ) {
$result[] = $key;
$result[] = $value;
}
var_dump( $result );