如何将一个数组的元素作为键,关联另一个数组的分组值?
把数组值关联为另一个数组键的解决方案
这需求太常见啦!咱们可以用PHP的几个数组函数组合起来轻松实现,核心思路就是先把值数组拆分成和键数组长度匹配的分组,再一一组合成关联数组。
具体步骤和代码示例
首先先定义你的两个数组:
// 作为键的数组 $keyArray = ['id', 'name', 'email']; // 待分组的值数组 $valueArray = [1, 'paula', 'paula@paula.com', 2, 'martin', 'martin@google.com', 3, 'kasandra', 'kasandra@google.com', 4, 'helena', 'helena@google.com', 5, 'sophia', 'sophia@google.com', 6, 'denis', 'denis@google.com'];
第一步,用array_chunk()把值数组按键数组的长度(也就是3)拆分成多个子数组:
// 按每组3个元素拆分 $chunkedValues = array_chunk($valueArray, count($keyArray));
这一步完成后,$chunkedValues里的每个元素都是包含3个值的子数组,正好对应一组用户的id、name、email。
第二步,遍历拆分后的子数组,用array_combine()把键数组和每个子数组的值组合成关联数组:
$result = []; foreach ($chunkedValues as $singleGroup) { $result[] = array_combine($keyArray, $singleGroup); }
最后咱们打印结果看看:
print_r($result);
输出的结果就是你想要的结构:
Array ( [0] => Array ( [id] => 1 [name] => paula [email] => paula@paula.com ) [1] => Array ( [id] => 2 [name] => martin [email] => martin@google.com ) [2] => Array ( [id] => 3 [name] => kasandra [email] => kasandra@google.com ) // 剩下的元素以此类推 )
注意事项
要确保值数组的总元素数是键数组长度的整数倍哦!如果不是的话,array_combine()会抛出错误。比如值数组多了1个元素,最后一组只有2个值,就没法和3个键对应。这种情况可以提前加个判断处理:
if (count($valueArray) % count($keyArray) !== 0) { trigger_error('值数组的长度不是键数组长度的整数倍,可能会出现匹配错误', E_USER_WARNING); // 也可以在这里补全默认值或者做其他处理 }
内容的提问来源于stack exchange,提问作者lewis4u
相关产品推荐
相关产品推荐

