我有这样一个数组:
$statuses = ['PROSPECT', 'BACKLOG', 'PROSPECT'];
$of_tranxs = [2, 1, 2];
$revs = [3, 1, 3];
$mgps = [4, 1, 4];
我想通过重复状态求和。输出一个数组如下:
array(
'status' => ['PROSPECT', 'BACKLOG'],
'of_tranx' => [4, 1],
'rev' => [6, 1],
'mgp' => [8, 1]
)
我使用的是PHP 7.4
我尝试了以下方法:
$result = array_zip_combine(
['status', 'of_tranx', 'rev', 'mgp'],
$statuses, $of_tranxs, $revs, $mgps
);
然后我预测,但结果不是我想要的。
4条答案
按热度按时间dgtucam11#
你可以在原始数组中执行求和,然后在执行一个循环后重新索引并合并它们。我希望这是相当有效的,我认为这将是很容易阅读和维护。
代码:(Demo)
或者通过维护一个新的索引递增变量来简化:(Demo)
最后,如果你不想跟踪结果数组中的索引,并且你不想用
array_values()
x4执行另外的四个循环,那么你可以把引用变量推送到结果数组中。代码:(Demo)
kxe2p93d2#
tvz2xvvm3#
假设您要获取status的唯一值,然后在其他数组中添加相应的项...
它首先获取状态的唯一值,然后(为了方便起见)将所有其他数组添加到单个数组中以允许
foreach
。然后遍历原始状态,将值添加到一个新数组(使用
array_fill_keys()
创建),该数组用于将该类型的所有值加在一起。给予...
zhte4eai4#
这个解决方案将允许你提交任意数量的数组,它们不需要只有OP指定的四个。
状态位置引用了其他数组,因此对于状态中的每个副本,我们也需要考虑其他数组的相应位置。
我假设您将始终具有相同的星座,其中具有数值的数组将始终具有与
$status
数组相同的长度。那么我相信做一个函数来处理这些是公平的。
预期输出应为
如果你只需要一个或多个数组求和,只需编辑函数调用。你可以这样做:
这只会输出of_trax的和。