如何在php中动态创建嵌套数组

时间:2014-10-26 06:51:20

标签: php arrays multidimensional-array

我想动态地从配置文件创建一个嵌套数组。 我的配置文件结构如下:

parameter1 value1;
parameter2 value2;
parameter3 value3;

block1{
    parameter1-1 value1-1;
    parameter1-2 value1-2;

    block1-1{
        parameter1-1-1 value1-1-1;
        parameter1-1-2 value1-1-2;

        block1-1-1{
            parameter1-1-1-1 value1-1-1-1;
            parameter1-1-1-2 value1-1-1-2;
        }
        block1-1-2{
            parameter1-1-2-1 value1-1-2-1;
            parameter1-1-2-2 value1-1-2-2;
        }
    }
    block1-2{
        parameter1-2-1 value1-2-1;
        parameter1-2-2 value1-2-2;

        block1-2-1{
            parameter1-2-1-1 value1-2-1-1;
            parameter1-2-1-2 value1-2-1-2;
        }
        block1-2-2{
            parameter1-2-2-1 value1-2-2-1;
            parameter1-2-2-2 value1-2-2-2;
        }
    }
}

block2{
    parameter2-1 value2-1;
    parameter2-2 value2-2;

    block2-1{
        parameter2-1-1 value2-1-1;
        parameter2-1-2 value2-1-2;

        block2-1-1{
            parameter2-1-1-1 value2-1-1-1;
            parameter2-1-1-2 value2-1-1-2;
        }
        block2-1-2{
            parameter2-1-2-1 value2-1-2-1;
            parameter2-1-2-2 value2-1-2-2;
        }
    }
    block2-2{
    parameter2-2-1 value2-2-1;
    parameter2-2-2 value2-2-2;

    block2-2-1{
        parameter2-2-1-1 value2-2-1-1;
        parameter2-2-1-2 value2-2-1-2;
    }
    block2-2-2{
        parameter2-2-2-1 value2-2-2-1;
        parameter2-2-2-2 value2-2-2-2;
        }
    }
}

我想在php中动态地使用这个数组:

$blocks = array(
    $parameter => $value,
    $parameter => $value,
    $block => array(
        $parameter => $value,
        $parameter => $value,
        $block => array(
            $parameter => $value,
            $parameter => $value,
            $block => array(
                $parameter => $value,
                $parameter => $value
                ...
           )
        )
    )
);

如何在PHP中创建动态嵌套数组

感谢。

更新:

  • 我逐行读取文件到数组,我想创建上面的结构进行编辑,然后再将其写入配置文件。

  • 我的意思是来自" dynamic"正在创建数组" for"或其他类似的事情。

2 个答案:

答案 0 :(得分:3)

试试这个......(更改" conf.txt"到"您的配置文件名称")

<?php
$file = fopen("conf.txt","r");
$array = array();
$a = createArray($file, $array);
fclose($file);

print("<pre>".print_r($a,true)."</pre>");

function createArray($file, $array){
  while(! feof($file)){
    $line = fgets($file);
    $line = trim($line);
    if ($line == ""){
        continue;
    }
    if (strpos($line,'{') !== false){
        $line = trim(str_replace('{','',$line));
        $array[$line] = array();
        $array[$line]  = createArray($file, $array[$line]);
    } else if (strpos($line,'}') !== false) {
        return $array;
    } else {
        $line = str_replace(';','',$line);
        $key  = strtok($line, ' ');
        $value = strtok(' ');
        $array[$key] = $value;
    }
  }
  return $array;
}
?>

答案 1 :(得分:-1)

动态创建数组:

$foo = array();

动态创建嵌套数组:

$foo = array();
$foo['bar'] = array();
$foo['bar']['zoo'] = array();

$foo = array();
$bar = array('zoo' => array());
$foo['bar'] = $bar;

最后致电

print_r($foo);

看看你创造了什么。这两种情况都是平等的,所以你会看到:

Array
(
    [bar] => Array
        (
            [zoo] => Array
                (
                )
        )
}

请参阅阵列上的文档:http://php.net/manual/en/language.types.array.php