Php 将平面数据表转换为多维数组
我有这些数据(列为深度、名称、值,顺序正确): 我正试图从中产生一个这样的数组结构:Php 将平面数据表转换为多维数组,php,recursion,multidimensional-array,Php,Recursion,Multidimensional Array,我有这些数据(列为深度、名称、值,顺序正确): 我正试图从中产生一个这样的数组结构: Array ( [id] => 12 [name] => Name [pages] => Array ( [0] => Page 1 [1] => Page 1 [2] => Page 1 ) [items] => Array
Array
(
[id] => 12
[name] => Name
[pages] => Array
(
[0] => Page 1
[1] => Page 1
[2] => Page 1
)
[items] => Array
(
[0] => Array
(
[id] => 4
[title] => Example Item
)
)
)
到目前为止,我所做的每一次尝试都失败了,我似乎无法理解其中的逻辑。任何帮助都将不胜感激。谢谢。您可以通过一些参考技巧来实现这一点。如果您将CSV输入转换为如下列表:
$in = array_map("str_getcsv", explode("\n", $table));
然后您可以像这样遍历它:
$data = array();
foreach ($in as $row) {
list ($depth, $key, $value) = $row;
$r = & $data; // start from base array, then submerge $n last keys
while ($depth--) { end($r); $r = & $r[key($r)]; }
$r[$key] = $value;
}
至少适用于您的示例:
Array
(
[id] => 12
[name] => Name
[pages] => Array
(
[0] => Page 1
[1] => Page 2
[2] => Page 3
)
[items] => Array
(
[0] => Array
(
[id] => 4
[title] => Example Items
)
)
)
这是csv还是数据的来源?除非您添加一列
父项
,否则我看不出您如何知道第1页
是页面
的子项,除了顺序,这是不保证的(除非还有一列您没有提到的顺序)。您可能想看看哪些定义良好的算法有助于处理此类情况(并允许您将多维数据存储在一个表中)。对不起,是的,我应该澄清一下,顺序是固定且正确的,因此可以计算出完整的层次结构。
Array
(
[id] => 12
[name] => Name
[pages] => Array
(
[0] => Page 1
[1] => Page 2
[2] => Page 3
)
[items] => Array
(
[0] => Array
(
[id] => 4
[title] => Example Items
)
)
)