2013-06-21 73 views
2

我有一個名爲「required」的屬性的PHP對象。這個「required」字段是一個嵌套數組。我想用動態字符串(對於屬性名稱和數組索引)從此對象中檢索所需的鍵。我怎樣才能做到這一點?使用動態鍵字符串檢索對象變量

$myObj = new StdClass; 
$myObj->required = array(
     "name_required" => 1, 
     "courses" => array(
       "course_name_required" => 1, 
       "lessons_required" => 1, 
       "lessons" => array(
         "lesson_name_required" => 1, 
         "lesson_file_required" => 1, 
         "is_viewed_required" => 1, 
        ), 
      ), 

); 
// Desired Key I want to retrieve using dynamic strings. 
$desiredKeyArrayPart = "[courses][lessons][lesson_name_required]"; 
$desiredKeyAttributePart = "required"; 
$desiredKey = $desiredKeyAttributePart . $desiredKeyArrayPart; 

// Get the value (Should return 1) 
$desiredValue = $myObj->$desiredKey; 

我想返回的值1,但此引發運行時錯誤: PHP公告:未定義的屬性:stdClass的:: $所需[課程] [經驗] [lesson_name_required]

回答

2

我假設你知道如何正確地訪問對象/數組,並試圖動態生成的路徑你想要的值。以下代碼將允許您傳遞一個字符串,並通過該字符串中多個鍵的對象進行篩選。

<?php 
$myObj = new StdClass; 
$myObj->required = array(
    "name_required" => 1, 
    "courses" => array(
    "course_name_required" => 1, 
    "lessons_required" => 1, 
    "lessons" => array(
     "lesson_name_required" => 1, 
     "lesson_file_required" => 1, 
     "is_viewed_required" => 1, 
    ), 
), 
); 
// Desired Key I want to retrieve using dynamic strings. 
$desiredKeyArrayPart = "[courses][lessons][lesson_name_required]"; 
$desiredKeyAttributePart = "required"; 

// Set our searchObject to $myObj->required using Variable Variables 
$searchObject = $myObj->$desiredKeyAttributePart; 
// Match all of the keys in our string 
preg_match_all('/\[(.*?)\]/', $desiredKeyArrayPart, $keyMap); 
// Foreach key that we found 
foreach ($keyMap[1] as $key) { 
    // Change our $searchObject to the new key's value 
    $searchObject = $searchObject[$key]; 
} 
// We found our object 
var_dump($searchObject); 
+0

正是我在找的東西。謝謝! – Rainbard

0

替換此:

$desiredKeyArrayPart = "[courses][lessons][lesson_name_required]"; 
$desiredKeyAttributePart = "required"; 
$desiredKey = $desiredKeyAttributePart . $desiredKeyArrayPart; 

// Get the value (Should return 1) 
$desiredValue = $myObj->$desiredKey; 

通過這樣的:

$desiredValue = $myObj->required['courses']['lessons']['lesson_name_required']; 

你tryi方式這樣做不起作用。此外,引用數組值最好避免警告。

2

$desiredKey的值是required[courses][lessons][lesson_name_required]。這不是作爲財產存在的。現在$desiredKey只是一個字符串。 PHP不解釋字符串來訪問數組屬性。你也忘記了數組鍵的引號。您可以訪問你想要這樣的值:

$desiredValue = $myObj->required["courses"]["lessons"]["lesson_name_required"];