我遇到了需要合并的两个数组的问题,其中第一个数组包含活动名称(page_data)的列表,如
[
"Campaign 1",
"Campaign 2",
"Campaign 3"
]
另一个数组包含营销活动的潜在客户数量。但此数组包含的键数是营销活动数组的两倍,如下所示:
[
222,
342,
71,
33,
43,
665
]
它包含两倍的关键字,因为它将从两种不同的形式获取销售线索,因此key 0
和key 3
的值将用于市场活动1,key 2
和key 4
将用于市场活动2。它将始终如此。如果有5个市场活动,销售线索数组将有10个关键字,key 0
和key 5
将用于市场活动1。活动2的key 1
和key 6
等。
然后我有这段代码要合并(推送):
foreach (json_decode($result) as $key) {
foreach ($pages["page_data"] as $p => $pvalue) {
array_push(
$leadArray,
array(
"pageName" => $pvalue["form_name"],
"pageLeads" => $key[$p]
)
);
}
}
这将错误地生成如下所示的数组:
[
"campaign 1" => 222,
"campaign 2" => 342,
"campaign 3" => 71
]
但这只需要0,1,2键,所以3,4,5键不在数组中。
我想要的是要组合的导联阵列中的键0和键3、键1和键4等,这样新的导联阵列将是
[
255,
386,
736
]
然后,我可以将其与campaigns数组合并,因为两个数组中的键数现在将匹配,这将给予一个如下所示的数组
[
"campaign 1" => 255,
"campaign 2" => 386,
"campaign 3" => 736
]
4条答案
按热度按时间ztyzrc3y1#
使用array_chunk函数来分割第二个数组,这样求和就很容易了。
当你使用这个函数时,你的数组将被拆分成两个数组。在第一个数组中你将有值0,1,2,而在第二个数组中你将有值3,4,5。现在通过使用键来遍历你的第一个数组,你将可以访问值对:0-3 1-4 2-5
验证代码:
结果是:
ao218c7q2#
试试这个
iyfamqjs3#
通过利用当前索引和groups数组计数之间的模值,可以避免分块和转置。
这是为了提高效率而优化的(因为它不进行迭代函数调用),具有最低的时间复杂度(因为它只迭代values数组一次),并且当您使用any number of values进行处理时也能正常工作。
代码:(Demo)
输出:
rta7y2nd4#
@aslawin方法可以通过一些函数轻松实现
回复评论:OP需要的长度是第二个数组的两倍以上,这一点并不明显,但是代码可以很容易地重写为任何长度
输出