有可能在PHP中引用匿名数组的特定元素吗?

这可能是一个简单的问题,恐怕答案可能是“不”,但是......

这是一段简单的代码:

function func1() {
  $bt = debug_backtrace();
  print "Previous function was " . $bt[1]['function'] . "n";
}

现在......这可以在没有临时变量的情况下完成吗? 用另一种语言,我可能期望能够说:

function func1() {
  print "Previous function was " . (debug_backtrace())[1]['function'] . "n";
}

唉,在PHP中,这导致了一个错误:

PHP Parse error:  syntax error, unexpected '[' ...

如果它不能完成,它不能完成,我会使用一个临时变量,但我宁愿不要。


不,不幸的是,在当前版本的PHP中不支持直接解引用,但显然会出现在PHP 5.4中。

另请参阅有关“取消引用”的术语问题?


数组解引用在PHP 5.3中暂时不可用,但它将在PHP 5.4中可用(PHP 5.4.0 RC2目前可供您调用)。 同时,您可以使用end()reset()或辅助函数来获取所需内容。

$a = array('a','b','c');
echo reset($a);          // echoes 'a'
echo end($a);            // echoes 'c'
echo dereference($a, 1); // echoes 'b'

function dereference($arr, $key) {
    if(array_key_exists($key, $arr)) {
        return $array[$key];
    } else {
        trigger_error('Undefined index: '.$key); // This would be the standard
        return null;
    }
}

请注意, end()current()将重置数组的内部指针,所以要小心。

为了您的方便,如果您将链接您的解除引用,这可能会派上用场:

function chained_dereference($arr, $keys) {
    foreach($keys as $key) {
        $arr = dereference($arr, $key);
    }

    return $arr;
}

// chained_dereference(debug_backtrace(), array(1, 'function')) = debug_backtrace()[1]['function']
链接地址: http://www.djcxy.com/p/69577.html

上一篇: Is it possible to reference a specific element of an anonymous array in PHP?

下一篇: Notepad++, How to remove all non ascii characters with regex?