PHP(CodeIgniter)如何将数组合并为嵌套关联数组?
解决CodeIgniter中数组嵌套合并的问题
嘿,作为CodeIgniter新手遇到这种数组结构调整很正常,我来一步步帮你搞定~
首先,先把你给出的原始数组整理成合法的PHP格式(你写的格式有小瑕疵,修正后方便操作):
// 你从数据库获取的主数据数组 $mainData = [ 0 => [ 'id' => 1, 'no_of_services' => 'guide,assistant' ] ]; // 单独获取的services数据数组 $servicesData = [ 'id' => 1, 'quote_id' => 1, 'tour_reference' => 'GD/Amsterdam/2019' ];
单个元素的嵌套合并
要把$servicesData嵌套到主数组的第一个元素里,直接赋值就行,非常直观:
// 将services数组嵌套进主数组的第一个元素 $mainData[0]['services'] = $servicesData; // 打印结果验证 print_r($mainData);
执行后你就能得到想要的数组结构:
Array ( [0] => Array ( [id] => 1 [no_of_services] => guide,assistant [services] => Array ( [id] => 1 [quote_id] => 1 [tour_reference] => GD/Amsterdam/2019 ) ) )
批量处理多个元素的情况
如果你的主数组有多个元素(比如查询出多条数据),可以通过循环来批量嵌套对应的services数据:
// 示例:多条主数据 $mainData = [ 0 => ['id' => 1, 'no_of_services' => 'guide,assistant'], 1 => ['id' => 2, 'no_of_services' => 'driver'] ]; // 示例:按id索引的services数据集 $servicesById = [ 1 => ['id' => 1, 'quote_id' => 1, 'tour_reference' => 'GD/Amsterdam/2019'], 2 => ['id' => 2, 'quote_id' => 2, 'tour_reference' => 'GD/Paris/2019'] ]; // 循环嵌套,用引用修改原数组 foreach ($mainData as &$item) { // 用??运算符处理找不到对应services的情况,避免报错 $item['services'] = $servicesById[$item['id']] ?? []; } unset($item); // 释放引用,防止后续操作意外修改数组 print_r($mainData);
额外小提示
在CodeIgniter中,如果你的主数据和services数据来自关联表,其实可以用Active Record的join方法直接关联查询,一次性获取整合后的结构,减少手动合并的步骤。不过如果是复杂的关联场景,上面的手动合并方法依然非常实用。
内容的提问来源于stack exchange,提问作者venkatesh A
相关产品推荐
相关产品推荐

