2011-11-26 2 views
5

이것은 아마도 간단한 질문이고, 나는PHP에서 익명 배열의 특정 요소를 참조 할 수 있습니까?

가 여기에 간단한 코드의 ... 대답은 "아니오"수 있습니다 두려워하지만 :

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

... 지금이 수 임시 변수없이 끝내야합니까? 다른 언어에서, 내가 말할 수 있기를 기대하고 있습니다 아아는, PHP에서,이 오류가 발생

function func1() { 
    print "Previous function was " . (debug_backtrace())[1]['function'] . "\n"; 
} 
: 그것을 할 수없는 경우

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'] 
관련 문제