2

この構成ファイルを多次元配列に変換しようと何度も試みました。つまり、config.txt ファイルを読み取ってから、多次元配列に変換する必要があります。助けが必要か、いくつかの提案が必要です。

config.txt:

id=www
session.timeout=120

session.server.0.host=127.0.0.1

session.server.0.port=1111

session.server.0.id=session1

session.server.1.host=127.0.0.1

session.server.1.port=1111

session.server.1.id=session2

image.width=640 

image.height=480 

image.watermark.small=wsmall.png 

image.watermark.normal=wnormal.png
4

3 に答える 3

1
function load_config_file($filename)
{
    $config = array();

    foreach(file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line)
    {
        if(!preg_match('/^(.+?)=(.*)$/', $line, $matches))
        {
            continue;
        }
        $indices = explode('.', $matches[1]);
        $current = &$config;
        foreach($indices as $index)
        {
            $current = &$current[$index];
        }
        $current = $matches[2];
    }

    return $config;
}

の結果load_config_file('config.txt'):

配列
(
    [ID] => www
    [セッション] => 配列
        (
            [タイムアウト] => 120
            [サーバー] => 配列
                (
                    [0] => 配列
                        (
                            [ホスト] => 127.0.0.1
                            [ポート] => 1111
                            [ID] => セッション 1
                        )

                    [1] => 配列
                        (
                            [ホスト] => 127.0.0.1
                            [ポート] => 1111
                            [ID] => セッション 2
                        )

                )

        )

    [画像] => 配列
        (
            [幅] => 640
            [高さ] => 480
            [透かし] => 配列
                (
                    [小] => wsmall.png
                    [通常] => wnormal.png
                )

        )

)
于 2012-07-25T18:38:11.907 に答える
1

このようなものが動作するはずです:

$config = array();
foreach( file( 'config.txt') as $line) {
    list( $keys, $value) = explode( '=', $line);

    $temp =& $config;
    foreach( explode( '.', $keys) as $key)
    {           
        $temp =& $temp[$key];
    }
    $temp = trim( $value);
}

一度に各行を読み取った後、-ing onによってすべてのキー$keysと値を取得します。次に、配列への「ポインター」として使用して、 onによって個別に抽出されたすべての をループし、多次元配列を形成します。すべてのキーが使い果たされたら、そのエントリに値を割り当て、次の行に移動します。$valueexplode()=$temp$config$keysexplode().

デモで非常にうまく機能していることがわかります。入力の場合、これにより次のような配列が生成されます。

array(3) {
  ["id"]=>
  string(3) "www"
  ["session"]=>
  array(2) {
    ["timeout"]=>
    string(3) "120"
    ["server"]=>
    array(2) {
      [0]=>
      array(3) {
        ["host"]=>
        string(9) "127.0.0.1"
        ["port"]=>
        string(4) "1111"
        ["id"]=>
        string(8) "session1"
      }
      [1]=>
      array(3) {
        ["host"]=>
        string(9) "127.0.0.1"
        ["port"]=>
        string(4) "1111"
        ["id"]=>
        string(8) "session2"
      }
    }
  }
  ["image"]=>
  array(3) {
    ["width"]=>
    string(3) "640"
    ["height"]=>
    string(3) "480"
    ["watermark"]=>
    array(2) {
      ["small"]=>
      string(10) "wsmall.png"
      ["normal"]=>
      &string(11) "wnormal.png"
    }
  }
}
于 2012-07-25T18:31:41.663 に答える
1

Zend Frameworkには、この構造のファイルをオブジェクトまたは配列に解析するZend_Config_Iniというクラスがあります。

これを使用するには、Zend Framework ライブラリから 3 つのファイルを取得する必要があります。

  • Zend/Config.php
  • Zend/Config/Ini.php
  • Zend/Config/Exception.php

これら 3 つのファイルを取得したら、そのファイルの値を解析してアクセスする方法を示すコードを次に示します。

require_once 'Zend/Config/Ini.php';

$ini = new Zend_Config_Ini('settings.ini');
$ini = $ini->toArray();

echo $ini['session']['server'][0]['host']; // 127.0.0.1
echo $ini['session']['server'][1]['id'];   // session2
echo $ini['image']['width'];               // 640

Zend Framework から 3 つのファイルを動作させるには、それらをZendPHP ファイルのある場所にあるフォルダーに配置し、そのディレクトリをinclude_pathZendに追加します。

于 2012-07-25T18:39:37.583 に答える