PHP将String转换为数组或对象(如果它代表一个)

时间:2011-02-16 23:58:12

标签: php arrays string

我有一个向页面打印信息的函数,它执行此操作是因为它每次检查该值是否存在,如果不存在则输出错误。由于发送到此函数的内容未知,它总是作为字符串到达​​,我无法改变它。

此函数是否可以解释"array[0]""object.something"等字符串并返回该值,而不是在$this

中查找值作为索引

E.g。

private array = array("stuff");

$this->printValue("string");   
$this->printValue("array[0]");
$this->printValue("object.name"); //Some specified object

public function printValue($key) {
    if(isset($this->$key)) {
        echo $this->$key;
    } else {
        die($key.' doesn\'t exist');    
    }
}

会回应:

string
stuff
thename

3 个答案:

答案 0 :(得分:0)

我认为更大的问题是,您是否尝试使用array[0]作为您尝试引用的内容的索引?我这样假设,否则您可以访问列出的项目中的数据。因此,如果您想使用array[0]作为索引标识符,那么您可以执行以下操作:

private data_array['array[0]'] = "stuff"; 
$this->printValue(data_array['array[0]']);

答案 1 :(得分:0)

也许这个例子有帮助:

class Example {
    public function __construct() {
        $this->foo = array(9, 8, 7);
        $this->bar = (object) array('attr1' => 'val1', 'attr2' => 'val2');
        $this->baz = 'abcde';
    }
    public function printValue($key) {
        echo eval('return $this->' . $key . ';') . "\n";
    }
}

$example = new Example();
$example->printValue('foo[0]'); # prints 9
$example->printValue('bar->attr1'); # prints val1
$example->printValue('baz'); # prints abcde

但是,请注意eval会带来安全风险,因为它可以执行任何 PHP代码,并且可能会导致致命错误。使用variable variables更安全,但不是一般的。无论如何,必须始终验证这些风险函数的输入。

答案 2 :(得分:0)

我不确定,但我认为你希望$pie = print_r($var,true)它将字符串作为返回值发送而不是打印出来