Если у меня есть:
$array = array( 'one' =>'value', 'two' => 'value2' );
как мне получить строку one обратно из $array[1] ?
Если у меня есть:
$array = array( 'one' =>'value', 'two' => 'value2' );
как мне получить строку one обратно из $array[1] ?
Вы не знаете. В вашем массиве нет ключа [1]. Ты мог бы:
Создайте новый массив, содержащий ключи:
$newArray = array_keys($array);
echo $newArray[0];
Но значение "один" находится в $newArray[0], а не [1].
Ярлык будет таким:
echo current(array_keys($array));
Получить первый ключ массива:
reset($array);
echo key($array);
Получить ключ, соответствующий значению «значение»:
echo array_search('value', $array);
Все зависит от того, что именно вы хотите сделать. Дело в том, что [1] не соответствует единице, как бы вы ее ни поворачивали.
$array = array( 'one' =>'value', 'two' => 'value2' );
$allKeys = array_keys($array);
echo $allKeys[0];
Что выведет:
one
Если вы планируете работать только с одним ключом, вы можете сделать это с помощью одной строки без необходимости хранить массив для всех ключей:
echo array_keys($array)[$i];
Или, если вам это нужно в цикле
foreach ($array as $key => $value)
{
echo $key . ':' . $value . "\n";
}
//Result:
//one:value
//two:value2
Вы можете сделать это следующим образом:
function asoccArrayValueWithNumKey(&$arr, $key) {
if (!(count($arr) > $key)) return false;
reset($array);
$aux = -1;
$found = false;
while (($auxKey = key($array)) && !$found) {
$aux++;
$found = ($aux == $key);
}
if ($found) return $array[$auxKey];
else return false;
}
$val = asoccArrayValueWithNumKey($array, 0);
$val = asoccArrayValueWithNumKey($array, 1);
etc...
Код не пробовал, но уверен, что сработает.
Удачи!
Если это первый элемент, то есть $array[0], вы можете попробовать:
echo key($array);
Если это второй элемент, то есть $array[1], вы можете попробовать:
next($array);
echo key($array);
Я думаю, что этот метод следует использовать, когда требуемый элемент является первым, вторым или максимум третьим элементом массива. В остальных случаях следует использовать циклы, иначе ухудшится читаемость кода.
Мне помогла функция key, и она очень проста:
Функция key() просто возвращает ключ элемента массива, на который в данный момент указывает внутренний указатель. Он никак не двигает указатель. Если внутренний указатель указывает за конец списка элементов или массив пуст, key() возвращает NULL.
Пример:
<?php
$array = array(
'fruit1' => 'apple',
'fruit2' => 'orange',
'fruit3' => 'grape',
'fruit4' => 'apple',
'fruit5' => 'apple');
// this cycle echoes all associative array
// key where value equals "apple"
while ($fruit_name = current($array)) {
if ($fruit_name == 'apple') {
echo key($array).'<br />';
}
next($array);
}
?>
Приведенный выше пример выведет:
fruit1<br />
fruit4<br />
fruit5<br />
Еще один пример:
Получить наиболее частое вхождение (я) в массиве:
PHP ›= 7.3:
$ php --version
PHP 7.4.3 (cli) (built: Oct 6 2020 15:47:56) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies
$ php -a
Interactive mode enabled
php > $a = array_count_values(array('abc','abc','def','def','def'));
php > var_dump($a);
array(2) {
["abc"]=>
int(2)
["def"]=>
int(3)
}
php > arsort($a);
php > var_dump($a);
array(2) {
["def"]=>
int(3)
["abc"]=>
int(2)
}
php > var_dump(array_key_first($a));
string(3) "def"
php > var_dump(array_keys($a)[1]);
string(3) "abc"
Если у вас есть ключ, вы можете легко запросить значение (= частота).
Расширяя ответ Рэма Дейна, функция key является альтернативным способом получения ключа текущего индекса массива. Вы можете создать следующую функцию,
function get_key($array, $index){
$idx=0;
while($idx!=$index && next($array)) $idx++;
if($idx==$index) return key($array);
else return '';
}