简体   繁体   中英

How to dynamically create nested array in php

I want create a nested array from a config file dynamically. My config file structure is like this:

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;
        }
    }
}

and i want this array dynamically in 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
                ...
           )
        )
    )
);

How to create dynamically nested array in PHP

Thanks.

UPDATE:

  • I read file line by line to an array and i want create above structure for edit it and write it again to config file.

  • I means from "dynamic" is creating array inside "for" or other similar things.

Try this... (change "conf.txt" to "your conf file name")

<?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;
}
?>

Creating array dynamically:

in all PHP versions:

$foo = array();

in PHP 5.4+ (aka "short syntax"):

$foo = [];

Creating nested array dynamically:

$foo = [];
$foo['bar'] = [];
$foo['bar']['zoo'] = [];

or

$foo = [];
$bar = ['zoo' => []];
$foo['bar'] = $bar;

And finally call

print_r($foo);

to see what you got created. Both cases are equal so you will see:

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

Please see docs on array: http://php.net/manua/en/language.types.array.php

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM