Как получить key
элемента и value
a в массиве n
позиций в конкретной позиции без цикла.
Представить
$postion = 3; // get array at 3rd position $array = array( "A" => "Four", "B" => "twp", "C" => "three", "D" => "Four", "E" => "Five", "F" => "Four"); $keys = array_keys($array); $value = array_values($array); echo implode(array_slice($keys, $postion, 1)), PHP_EOL; // Key at 3rd posstion echo implode(array_slice($value, $postion, 1)), PHP_EOL; // Value at n position
Вывод
D Four
Проблемы
Почему бы не использовать цикл
Почему бы не использовать базу данных
Почему бы не использовать SplFixedArray
Это было бы решением, но я следую за тобой, потому что я не использую положительные ключи (я действительно это не честно на php-части)
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'array must contain only positive integer keys'
Что вы понимаете под большим набором данных:
1e6
или 1e7
с 512M memory limit
Уверен, что-то вроде fseek
для массива сделает трюк .. но не уверен, что это существует
Предполагая PHP 5.4, с разыменованием массива:
echo $array[array_keys($array)[$position]];
В более ранних версиях вам нужно разбить его на две строки:
$keys = array_keys($array); echo $array[$keys[$position]];
Также стоит использовать двухстрочный подход в 5.4+, если вам нужно получить доступ к нескольким элементам, чтобы вы могли только вызвать относительно дорогие функции array_keys()
один раз. Кроме того, подход разыменования предполагает, что существует определенная позиция внутри массива, что может и не быть. Разбивка на несколько операций позволит вам справиться с этим случаем ошибки.
Хотя, конечно, вам никогда не нужен доступ к ключу, вы можете просто сделать:
echo array_values($array)[$position]; // or $values = array_values($array); echo $values[$position];
редактировать
Класс ArrayIterator
также может сделать это для вас:
$iterator = new ArrayIterator($array); $iterator->seek($position); echo $iterator->key(), " = ", $iterator->current(); // D = Four
Это, пожалуй, самый дешевый способ сделать это, предполагая, что он не создает копию массива в памяти, когда вы это делаете (все еще исследуете этот элемент), и, вероятно, лучший метод для множественного доступа к произвольным ключам.
То, что вы хотите, невозможно. Массивы PHP имеют эффективный доступ по ключу, но не имеют эффективного доступа за счет смещения. Заказ доступен только как связанный список, поэтому наилучшей эффективностью, на которую вы можете надеяться, является цикл O (n), который просто проходит через массив и ищет смещение:
$i = 0; foreach ($array as $value) { if ($i++ === $offset) { // found value } }
Если вы хотите, чтобы эта операция была быстрой, вам придется использовать правильный, численно и последовательно индексированный массив.
на самом деле вам не нужен массив $ values:
$keys = array_keys($array); $value_3=$array[$keys[3]];
Я не хорошо понимаю ваш вопрос, но если вам нужен ключ и элемент из позиции
$position = 3; // get array at 3rd position $array = array( "A" => "Four", "B" => "twp", "C" => "three", "D" => "Four", "E" => "Five", "F" => "Four"); $keys = array_keys($array); $values = array_values($array); if($values[$position] == "Four" && $keys[$position] == "D") { echo "All it's Right!\n"; }
вам не нужна операция для этой задачи