Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将平面数据表转换为多维数组_Php_Recursion_Multidimensional Array - Fatal编程技术网

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
                )

        )

)