2011-11-26 22 views
5

Bu muhtemelen basit bir soru ve benPHP'de anonim bir dizinin belirli bir öğesine başvurmak mümkün mü?

İşte basit bir kod parçası ... cevap "hayır" olabilir korkuyorum ama:

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

Şimdi ... Bu Can geçici değişken olmadan yapılabilir mi? Başka bir dilde, söylemek mümkün beklediğinizden: Ne yazık ki, PHP'de, bu hatayla sonuçlanır

function func1() { 
    print "Previous function was " . (debug_backtrace())[1]['function'] . "\n"; 
} 
: yapıldığını edilemiyorsa

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

, olamaz yapılmalı ve geçici bir değişken kullanacağım, ama tercih etmem.

cevap

1

Array dereferencing şu anda PHP 5.3'te mevcut değildir, ancak PHP 5.4'te (PHP 5.4.0 RC2 is currently available for you to tinker with) kullanılabilir. Bu arada, istediğinizi almak için end(), reset() veya bir yardımcı işlevini kullanabilirsiniz.

$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() ve current() dizinin iç işaretçi sıfırlamak, bu yüzden dikkatli olacağını unutmayın. Eğer dereferences zincirleme olacak eğer Size kolaylık sağlamak için

, bu işe yarayabilir:

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'] 
İlgili konular