【发布时间】:2021-03-29 13:30:53
【问题描述】:
我有一个包含键值对的多维数组。键的某些值是数组,而该数组中的某些值也是数组。它只有 3 个分支深(目前),但我试图递归循环遍历数组,保存分支的每一级的键,并在它到达一个也模仿原始结构的字符串时创建一个新数组大批。当它到达一个字符串时,每个值都应该有一个新的对象实例化。
下面的代码可以做到这一点,但只创建一个平面数组。
foreach ($data as $key => $value) {
if (!is_array($value)) {
$a_objects[$key] = new Component([$key], $value);
} else {
foreach ($value as $valueKey => $valueValue) {
if (!is_array($valueValue)) {
$a_objects[$key . "_" . $valueKey] = new Component([$key, $valueKey], $valueValue);
} else {
foreach ($valueValue as $k => $v) {
$a_objects[$key . "_" . $valueKey . "_" . $k] = new Component([$key, $valueKey, $k], $v);
}
}
}
}
这是我自己最好的尝试,但经过一些测试后它似乎没有保存到 b_objects 中,它似乎没有保存对象实例。
$b_objects = [];
function create_r($data, $id)
{
foreach ($data as $key => $value) {
if (is_array($value) == true) {
array_push($id, $key);
create_r($value, $id);
} else {
array_push($id, $key);
$b_objects[$key] = new Component($id, $value);
$id = [];
}
}
}
$id = [];
create_r($data, $id);
echo "this is b_objects";
echo "<pre>";
print_r($b_objects);
echo "</pre>";
我验证了 $id 数组包含正确的“键”。我觉得这个解决方案非常接近,但我不知道如何使用我的 $id 数组来模拟 $data 的结构。
我希望能够说 $b_objects[$level1key][$level2key][$level3key]...[$leveln-1key] = new Component...
谢谢!
【问题讨论】:
-
你想达到什么目的?当您可以使用自动加载时初始化所有内容似乎很愚蠢,因为当您实际访问它时,使用 __get 和 __call
标签: php arrays class instance key-value