php - 有条件的数组的PHP总和值
问题描述
我正在尝试对数组的值求和并检查值是否<=
小于或等于10
然后添加index
具有值的新键:
源数组:
$arr= array(
'all' => array(
'db1' => array(
'val' => 9.4,
'ran' => 'ex'
),
'db2' => array(
'val' => 5.2,
'ran' => 'as'
),
'db3' => array(
'val' => 2.5,
'ran' => 'bm'
),
'db4' => array(
'val' => 7.4,
'ran' => 'kl'
),
'db5' => array(
'val' => 2.9,
'ran' => 'df'
)
)
);
结果数组:
$res = array(
all => array(
'db1' => array(
'val' => 9.4,
'ran' => 'ex',
'index' => 1
),
'db2' => array(
'val' => 5.2,
'ran' => 'as',
'index' => 2
),
'db3' => array(
'val' => 2.5,
'ran' => 'bm',
'index' => 2
),
'db4' => array(
'val' => 7.1,
'ran' => 'kl',
'index' => 3
),
'db5' => array(
'val' => 2.9,
'ran' => 'df',
'index' => 3
)
)
);
正如我们所看到db1['val']
的,不能求和,db2['val']
因为结果将大于10
所以添加索引 1,db2 和 db3 小于10
所以将相同的索引 2 添加到它们。
任何帮助或建议将不胜感激。
解决方案
那么,您需要遍历数组元素并跟踪您的索引和总和:
<?php
$data = [
'db1' => ['val' => 9.4, 'ran' => 'ex'],
'db2' => ['val' => 5.2, 'ran' => 'as'],
'db3' => ['val' => 2.5, 'ran' => 'bm'],
'db4' => ['val' => 7.4, 'ran' => 'kl'],
'db5' => ['val' => 2.9, 'ran' => 'df']
];
$sum = 0;
$index = 1;
array_walk($data, function(&$entry) use (&$sum, &$index) {
$sum += $entry['val'];
if ($sum >= 10) {
$index++;
$sum -= 10;
}
$entry['index'] = $index;
});
print_r($data);
这个变体甚至会更紧凑、更简洁,但更难阅读并且有点风险:
<?php
$data = [
'db1' => ['val' => 9.4, 'ran' => 'ex'],
'db2' => ['val' => 5.2, 'ran' => 'as'],
'db3' => ['val' => 2.5, 'ran' => 'bm'],
'db4' => ['val' => 7.4, 'ran' => 'kl'],
'db5' => ['val' => 2.9, 'ran' => 'df']
];
array_walk($data, function(&$entry) use (&$sum, &$index) {
$sum += $entry['val'];
if ($sum >= 10) {
$index++;
$sum -= 10;
}
$entry['index'] = $index + 1;
});
print_r($data);
明显的输出是:
Array
(
[db1] => Array
(
[val] => 9.4
[ran] => ex
[index] => 1
)
[db2] => Array
(
[val] => 5.2
[ran] => as
[index] => 2
)
[db3] => Array
(
[val] => 2.5
[ran] => bm
[index] => 2
)
[db4] => Array
(
[val] => 7.4
[ran] => kl
[index] => 3
)
[db5] => Array
(
[val] => 2.9
[ran] => df
[index] => 3
)
)
推荐阅读
- c# - 缺少 XML 序列化根元素
- mysql - MySQL加入字段列表中的未知列-不确定为什么它是未知的
- php - PHP htmlspecialchars() 或 htmlentities() 例外
- html - Django 日期和时间选择器
- php - 如何在 Wordpress 中禁用 HTTPS 并将 HTTPS 重定向到 HTTP?
- javascript - JavaScript - 用 async / await 替换 setTimeout
- apache-spark - 进行pyspark查询时如何提取json的值
- angular - ngClass 未检测到变量的变化
- azure - azure 数据湖 - 验证 csv 中的要求字段
- react-native - Gradle:无法初始化类 org.codehaus.groovy.runtime.InvokerHelper