Я пытаюсь получить первый ключ ассоциативного массива, не создавая временную переменную через 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 не имеет таких возможностей оптимизации, но решил, что это войнапрямое упоминание.
Краткость принятого ответа хороша, и сработает, если вы работаете с массивами разумного размера.