如何基于table_name键值将多维数组分组为子数组?
按table_name分组多维数组的解决方案
没问题,这在PHP里实现起来非常直观,咱们只需要遍历原数组,把每个子数组按照table_name的值归类到对应的分组中即可。不管原数组里有多少重复的table_name,或者子数组的排列顺序如何,这个方法都能完美处理。
示例实现代码
首先先看你的原数组(简化后):
$originalArray = [ [ "feed_key" => "URL", "table_key" => "feed_url", "table_name" => "data_feeds" ], [ "feed_key" => "network_id", "table_key" => "name", "table_name" => "networks" ], [ "feed_key" => "product_name", "table_key" => "product_description", "table_name" => "products" ], // 可以添加更多重复table_name的子数组测试 [ "feed_key" => "another_url", "table_key" => "another_feed_url", "table_name" => "data_feeds" ] ];
然后是分组的核心代码:
$groupedArray = []; foreach ($originalArray as $item) { // 取出当前子数组的table_name作为分组键 $tableName = $item['table_name']; // 如果该分组还不存在,先初始化一个空数组 if (!isset($groupedArray[$tableName])) { $groupedArray[$tableName] = []; } // 将当前子数组追加到对应分组中 $groupedArray[$tableName][] = $item; }
输出结果
运行上面的代码后,$groupedArray的结构会变成:
array:3 [▼ "data_feeds" => array:2 [▼ 0 => array:3 [▼ "feed_key" => "URL" "table_key" => "feed_url" "table_name" => "data_feeds" ] 1 => array:3 [▼ "feed_key" => "another_url" "table_key" => "another_feed_url" "table_name" => "data_feeds" ] ] "networks" => array:1 [▼ 0 => array:3 [▼ "feed_key" => "network_id" "table_key" => "name" "table_name" => "networks" ] ] "products" => array:1 [▼ 0 => array:3 [▼ "feed_key" => "product_name" "table_key" => "product_description" "table_name" => "products" ] ] ]
逻辑说明
- 我们先初始化一个空数组
$groupedArray用来存放分组后的结果 - 遍历原数组的每一个子元素,提取
table_name作为分组的键名 - 如果该键名在
$groupedArray中还不存在,就先创建一个空数组作为它的值 - 最后把当前遍历到的子数组追加到对应分组的数组里
这个方法的优势是兼容性强,不管子数组里有多少额外的键(比如你例子里提到的每个子数组有7个键),都不会丢失任何数据;同时效率高,只需要一次遍历就能完成分组操作。
内容的提问来源于stack exchange,提问作者futureweb
相关产品推荐
相关产品推荐

