2011-11-26 48 views
5

這可能是一個簡單的問題,我恐怕答案可能是「不」,但是......是否可以在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 '[' ... 

如果無法做到,就不能做完了,我會用一個臨時變量,但我寧願不要。

回答

1

現在PHP 5.3中不提供數組解引用,但它將在PHP 5.4(PHP 5.4.0 RC2 is currently available for you to tinker with)中可用。在此期間,您可以使用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'] 
相關問題