簡體   English   中英

從PHP數組檢索值

[英]Retrieve Value from PHP Array

我有一個數組來存儲這樣的配置

$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'

由於我不知道字符串中包含多少個鍵,因此我需要使其更具動態性。 提前致謝

我認為您正在考慮JSON

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

我真的很想知道您為什么要這樣做,但是事情就這樣了:

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']);

它們只是簡單的嵌套數組。

$config['db']將給你第一個內部數組

$config['db']['db1']將為您提供包含您要查找的所有數據庫配置的陣列。

$config['db']['db1']['dbname'] :'dbname'是'db1'數組中的索引,它將為您提供所需的值。

function read($layers, $arr){
    $toReturn = $arr;
    foreach(split('.', $layers) as $layer)
        $toReturn = $toReturn[$layer];
    return $toReturn;
}

你為什么要這么做,我還不是最霧蒙蒙的。 但是,你去了。

把那個東西扔到一個物體上! 或者更確切地說,將每個數組都轉換為對象,然后可以像使用它一樣使用它。

$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'
        )
     )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM