1. Текущая и соседние итерации
Удобнее всего работать с итерациями используя функцию current()
. Эта функция возвращает текущий элемент массива. Но нужно быть аккарутным при исползовании этой функции, например, внутри foreach
. Как известно, foreach
на каждой итерации присваивает значение текущего элемента переменной, имя которой мы указывали при инициализации, и сразу увеличивает указатель массива на единицу.
Пример:
$array = array(
0 => array(
'id' => 32,
'title' => 'test 1',
'uri' => 'test-1.html'
),
1 => array(
'id' => 71,
'title' => 'test 2',
'uri' => 'test-2.html'
),
2 => array(
'id' => 17,
'title' => 'test 3',
'uri' => 'test-3.html'
),
3 => array(
'id' => 83,
'title' => 'test 4',
'uri' => 'test-4.html'
)
);
foreach($array as $item) {
if($item['id'] == 71) {
return current($array);
}
}
//вывод:
/*
2 => array(
'id' => 17,
'title' => 'test 3',
'uri' => 'test-3.html'
)
*/
В этом случае, будет возвращен элемент не с 71
идентификатором, а с 17
т.к. значение присвоилось $item
и указатель увеличился, а мы возвращаем current()
уже после этого потому возвращается следующий.
Правильно будет использовать с тем же массивом:
while ($item = current($array)) {
if ($item['id'] == 17) {
return $item;
}
next($array);
}
Обязательно нужно писать
next($array)
, чтобы при несрабатывании условия осуществлялся переход к следующей итерации.