2011-11-26 27 views
5

Questa è probabilmente una semplice domanda, e ho paura la risposta potrebbe essere "no", ma ...È possibile fare riferimento a un elemento specifico di un array anonimo in PHP?

Ecco un semplice pezzo di codice:

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

Ora ... Può questo essere fatto senza la variabile temporanea? In un'altra lingua, mi potrebbe aspettare di essere in grado di dire:

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

Ahimè, in PHP, questo si traduce in un errore:

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

Se non si può fare, non può essere fatto, e userò una variabile temporanea, ma preferirei di no.

risposta

1

Array dereferenziazione non è disponibile in PHP 5.3 in questo momento, ma sarà disponibile in PHP 5.4 (PHP 5.4.0 RC2 is currently available for you to tinker with). Nel frattempo, è possibile utilizzare end(), reset(), o di una funzione di supporto per ottenere quello che vuoi.

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

noti che end() e current() ripristinerà puntatore interno dell'array, quindi fate attenzione.

Per la vostra convenienza, se sarete concatenano i tuoi dereferenziazioni questo potrebbe rivelarsi utile:

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'] 
Problemi correlati