2015-01-12 2 views
1

Рассмотрим мой следующий массивЛучший способ переместить внутренний указатель массива в PHP

for($i=0;$i<10;$i++) $arr2test['a'.sprintf('%s',$i)]='arr # '.($i+1); 

Теперь я могу получить доступ к $ arr2test по индексу. Например, я могу выделить $ arr2test ['a3'], чтобы показать четвертый элемент этого массива.

Мое требование состоит в том, чтобы получить пятый элемент этого массива. Пусть, я не знаю индекс пятого элемента. Я просто знаю, четвёртого указательного элемент т.е. a3

Я знаю, что я могу сделать это с помощью петли Еогеаспа как код ниже -

foreach($arr2test as $k=>$v){ 
    if(isset($a3Found)) break; 
    if($k=='a3') $a3Found=true; 
} 
echo $v; 

Пожалуйста, обратите внимание на массив, который содержит большое количество данных, как тысячи или даже больше данных , Итак, в этом случае вышеуказанное решение не является совершенным. Особенно, когда мне нужно делать такую ​​операцию часто.

+0

Почему вы не просто использовать целые числа в качестве индексов? – Barmar

+0

Я не строю этот массив, это происходит из другого процесса. Итак, массив индексов недоступен ... –

ответ

0

Вы можете использовать array_keys().

$keys = array_keys($arr2test); 
$index4 = array_search('a3', $keys); 
$index5 = $keys[$index4+1]; 
$element5 = $arr2test[$index5]; 
+0

Вы предоставляете хороший трюк. Но неэффективно я думаю. Это менее эффективно, чем мое решение для петли foreach. Причина: сначала вы создаете массив по ключам, что означает, что весь массив является циклом/чтением. Затем с помощью array_search прочитайте эту позицию. –

+1

Я не думаю, что есть более эффективный путь, чем ваш цикл. – Barmar

0

Использование array_slice:

$a4 = array_slice($arr2test, 4, 1); 
+0

Человек, я не знаю положения. просто я знаю ассоциативный индекс. поэтому ваше решение неприемлемо ... –

Смежные вопросы