Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用动态键字符串检索对象变量_Php_Reference - Fatal编程技术网

Php 使用动态键字符串检索对象变量

Php 使用动态键字符串检索对象变量,php,reference,Php,Reference,我有一个PHP对象,其属性名为“required”。此“必填”字段是嵌套数组。我想用动态字符串(用于属性名和数组索引)从此对象检索所需的键。我怎样才能做到这一点 $myObj = new StdClass; $myObj->required = array( "name_required" => 1, "courses" => array( "course_name_required" => 1,

我有一个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::$required[课程][课程][课程名称]

替换此:

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

你试图这样做是行不通的。此外,最好引用数组值以避免警告。

$desiredKey
的值是
必修[课程][课程][课程名称][必修]
。那不是一种财产。现在,
$desiredKey
只是一个字符串。PHP不会解释字符串以访问数组属性。您还忘记了数组键周围的引号。您可以通过以下方式访问所需的值:

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

我假设您知道如何正确访问对象/数组,并尝试动态生成所需值的路径。下面的代码将允许您传递字符串,并通过对象筛选该字符串中的多个键

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

正是我想要的。谢谢