0

このような構成を保存する配列があります

$config = array (
            'db' => array(
                'db1' => array(
                    'dbname' => 'mydatabase', 
                    'user' => 'myusername', 
                    'pass' => 'mypassword', 
                    'host' => 'myhost'
                )
            ),
            'url' => array(
                'homeUrl' => 'http://www.example.com'
            )
         )

そして、次のような文字列を渡して配列からデータを取得する関数を作成してdb.db1.dbnameいます。'mydatabase'

キーを取得するために、文字列を配列に分解しようとしましたdb, db1, and dbname。しかし、その後、私はそれらをどのように使用するか、$config -> db -> db1 -> dbnameまたは$config['db']['db1']['dbname']取得するためにどのように使用する必要があるかについて、ちょっと行き詰まりました'mydatabase'

理想的には、 という名前の関数があり、read($arg, $array)このような結果を取得したいとします。

read('db.db1.dbname', $config), returns 'mydatabase'
read('url.homeUrl', $config), returns 'http://www.example.com'

文字列に含まれるキーの数がわからないため、これをより動的にする必要があります。前もって感謝します

4

5 に答える 5

5

JSONについて考えていると思います

試す$config['db']['db1']['dbname'];

于 2012-08-20T22:36:32.247 に答える
4

なぜこれをやりたいのか本当に疑問に思っていますが、次のようになります。

function read($item, $config)
{
    $selectors = explode('.', $item);

    $configItem = $config;
    foreach($selectors as $selector) {
        $configItem = $configItem[$selector];
    }

    return $configItem;
}

$config = array (
    'db' => array(
        'db1' => array(
            'dbname' => 'mydatabase', 
            'user' => 'myusername', 
            'pass' => 'mypassword', 
            'host' => 'myhost',
        ),
    ),
    'url' => array(
        'homeUrl' => 'http://www.example.com',
    ),
);

read('db.db1.dbname', $config); // will return mydatabase

キーが存在するかどうかを確認し、存在しない場合はエラーまたは例外をスローする必要があることに注意してください。

関数を使用する代わりに、できない理由があります:

function functionThatNeedsDatabaseInfo($databaseInfo)
{
    // do database stuff
}

functionThatNeedsDatabaseInfo($config['db']['db1']);
于 2012-08-20T22:45:05.500 に答える
1

それらは単純なネストされた配列です。

$config['db']最初の内部配列を提供します

$config['db']['db1']探しているすべてのデータベース構成を含む配列が表示されます。

$config['db']['db1']['dbname']: 'dbname' は、必要な値を提供する 'db1' 配列のインデックスです。

于 2012-08-20T22:39:40.407 に答える
0
function read($layers, $arr){
    $toReturn = $arr;
    foreach(split('.', $layers) as $layer)
        $toReturn = $toReturn[$layer];
    return $toReturn;
}

なぜあなたはこれをしたいのですか、私は最も霧がありません。しかし、そこに行きます。

于 2012-08-20T22:47:01.087 に答える
-1

それをオブジェクトにキャストしてください!むしろ、すべての配列をオブジェクトとしてキャストすると、それを同じように使用できます。

$config = (object) array (
        (object) 'db' => array(
            (object) 'db1' => array(
                'dbname' => 'mydatabase', 
                'user' => 'myusername', 
                'pass' => 'mypassword', 
                'host' => 'myhost'
            )
        ),
        (object) 'url' => array(
            'homeUrl' => 'http://www.example.com'
        )
     )
于 2012-08-20T22:39:35.770 に答える