Intereting Posts

Можно ли ссылаться на конкретный элемент анонимного массива в 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 '[' ... 

Если это невозможно сделать, это невозможно, и я буду использовать временную переменную, но я бы предпочел.

Solutions Collecting From Web of "Можно ли ссылаться на конкретный элемент анонимного массива в PHP?"

Нет, прямое разыменование, к сожалению, не поддерживается в текущих версиях PHP, но, по-видимому, будет представлено в PHP 5.4.

Также см. Терминологический вопрос о «разыменовании»? ,

Разрушение разворота в Array не доступно в PHP 5.3 прямо сейчас, но оно будет доступно в PHP 5.4 ( PHP 5.4.0 RC2 в настоящее время доступен для вас, чтобы возиться с ). Тем временем вы можете использовать функции 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']