Я пытаюсь получить первый ключ ассоциативного массива, не создавая временную переменную с помощью array_keys ()
или тому подобное, чтобы пройти по ссылке. К сожалению, и reset ()
, и array_shift ()
принимают аргумент массива по ссылке, поэтому ни один из них не кажется жизнеспособным.
С PHP 5.4 я буду в раю; array_keys ($ array) [0];
, но, к сожалению, это, конечно, тоже не вариант.
Я мог бы создать функцию для этой цели, но я могу только представить, что есть какая-то смесь Функции PHP array _ *
, которые выдадут желаемый результат в одном операторе , который я не могу придумать или придумать.
Итак:
$array = array('foo' => 'bar', 'hello' => 'world');
$firstKey = assorted_functions($array); // $firstKey = 'foo'
Причина " пункт "без ссылки" в моем вопросе предназначен только для того факта, что я предполагаю, что потребуется array_keys ()
( если есть способ передачи по ссылке, пожалуйста, уволите )
Я бы использовал key ()
, но для этого требуется reset ()
, поскольку я не уверен, где будет находиться указатель во время этой операции.
Дополнение
Я слежу за недавним осознанием: как я уже упоминал в комментариях, он все равно будет использовать память, поэтому, если это вызывает беспокойство, у этого вопроса нет решения.
$a = range(0,99999);
var_dump(memory_get_peak_usage()); // int(8644416)
$k = array_keys($a)[0];
var_dump(memory_get_peak_usage()); // int(17168824)
I знал об этом, так как PHP не имеет такие возможности оптимизации, но посчитали, что это заслуживает явного упоминания.
Краткость принятого ответа, тем не менее, хороша и будет работать, если вы работаете с массивами разумного размера .