2011-11-26 5 views
5

Prawdopodobnie jest to proste pytanie, a obawiam się, że odpowiedź może być „nie”, ale ...Czy można odwołać się do określonego elementu anonimowej tablicy w PHP?

Oto prosty kawałek kodu:

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

... To może teraz zrobić bez zmiennej tymczasowej? W innym języku, mogę oczekiwać, aby móc powiedzieć:

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

Niestety, w PHP, to powoduje błąd:

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

Jeśli nie można zrobić, nie może być zrobione, a użyję zmiennej tymczasowej, ale wolałbym nie.

Odpowiedz

1

Dereferencjacja macierzy nie jest teraz dostępna w PHP 5.3, ale będzie dostępna w PHP 5.4 (PHP 5.4.0 RC2 is currently available for you to tinker with). W międzyczasie możesz użyć funkcji end(), reset() lub funkcji pomocniczej, aby uzyskać to, co chcesz.

$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; 
    } 
} 

Zauważ, że end() i current() zresetuje wewnętrzny wskaźnik tablicy, więc należy być ostrożnym.

Dla Państwa wygody, jeśli będziesz łańcuchowym swoje dereferences to może się przydać:

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'] 
Powiązane problemy