php - 将多维数组转换为平面数组php
问题描述
我在将多维数组转换为平面数组时遇到问题我有一个这样的输入数组:
Array
(
[0] => Array
(
[type] => MagentoCatalogRuleModelRuleConditionCombine
[aggregator] => all
[conditions] => Array
(
[0] => Array
(
[type] => MagentoCatalogRuleModelRuleConditionProduct
[attribute] => category_ids
)
)
)
[1] => Array
(
[type] => MagentoCatalogRuleModelRuleConditionProduct
[attribute] => category_ids
)
[2] => Array
(
[type] => MagentoCatalogRuleModelRuleConditionProduct
[attribute] => attribute_set_id
)
)
我希望输出是这样的数组,子数组将被展平为父数组级别,并且将被索引识别:
Array
(
[1--1] => Array
(
[type] => Magento\CatalogRule\Model\Rule\Condition\Combine
[aggregator] => all
)
[1--1--1] => Array
(
[type] => Magento\CatalogRule\Model\Rule\Condition\Product
[attribute] => category_ids
)
[1--2] => Array
(
[type] => Magento\CatalogRule\Model\Rule\Condition\Product
[attribute] => category_ids
)
[1--3] => Array
(
[type] => Magento\CatalogRule\Model\Rule\Condition\Product
[attribute] => attribute_set_id
)
)
输入数组可能包含许多子层,输出数组必须是该格式的索引。我坚持将此逻辑写入代码。谢谢!
解决方案
您可以使用这样的递归函数:
function flatten($array, $parent_key = '1') {
$flattened_array = [];
foreach ($array as $key => $item) {
$tmp = $item;
unset($tmp['conditions']);
$child_key = $parent_key . '--' . strval($key + 1);
$flattened_array[$child_key] = $tmp;
if (isset($item['conditions'])) {
$flattened_array = array_merge($flattened_array, flatten($item['conditions'], $child_key));
}
}
return $flattened_array;
}
$input = [
0 => [
'type' => 'MagentoCatalogRuleModelRuleConditionCombine',
'aggregator' => 'all',
'conditions' => [
0 => [
'type' => 'MagentoCatalogRuleModelRuleConditionProduct',
'attribute' => 'category_ids'
]
]
],
1 => [
'type' => 'MagentoCatalogRuleModelRuleConditionProduct',
'attribute' => 'category_ids'
],
2 => [
'type' => 'MagentoCatalogRuleModelRuleConditionProduct',
'attribute' => 'attribute_set_id'
]
];
print_r(flatten($input));
输出:
Array
(
[1--1] => Array
(
[type] => MagentoCatalogRuleModelRuleConditionCombine
[aggregator] => all
)
[1--1--1] => Array
(
[type] => MagentoCatalogRuleModelRuleConditionProduct
[attribute] => category_ids
)
[1--2] => Array
(
[type] => MagentoCatalogRuleModelRuleConditionProduct
[attribute] => category_ids
)
[1--3] => Array
(
[type] => MagentoCatalogRuleModelRuleConditionProduct
[attribute] => attribute_set_id
)
)
推荐阅读
- google-data-studio - 使用 SVG 在 Google Data Studio 中创建自定义可视化
- python - 从项目外部抓取 - 空设置
- node.js - 使用事件而不是 switch 语句有客观上更可取的理由吗?
- java - 用于 spring-boot-dependencies 的 Maven 不可解析 POM
- amazon-web-services - AWS - Api Gateway POST body with Content-Type: text/plain 而不是 json/application 到 lambda
- c - 在函数中调用时如何解决匿名创建的结构的奇怪行为?
- go - 从非缓冲通道读取
- c# - Two character Integer to char?
- javascript - 为什么我可以在静态 html 中使用 AR、js 但在 vue 应用程序中无法使用
- react-native - Onscroll 原生事件更新所有相同类型的包装器组件