Php массив предыдущий элемент

Справочник по PHP : Функции работы с данными : Работа с массивами : Курсор массива

Функция reset() устанавливает внутренний курсор массива arr на его начало и возвращает значение начального элемента.

Пример использования функции reset():

n"; // "step one" // skip two steps next($array); next($array); echo current($array) . "
n"; // "step three" // reset pointer, start again on step one reset($array); echo current($array) . "
n"; // "step one" ?>

Функция поддерживается PHP 3, PHP 4, PHP 5

end

Производит перенос курсора в конец массива.

Функция end() устанавливает внутренний курсор массива arr на последний элемент и возвращает значение этого элемента.

Пример использования функции end():

Функция поддерживается PHP 3, PHP 4, PHP 5

next

Производит перенос курсора вперед.

Функция next() возвращает значение элемента, на котором в данный момент находится курсор, и перемещает курсор массива на следующий элемент. Возвращает false, если элементов больше не осталось.

Также false возвращается, если встречается элемент с пустым значением, следовательно для корректной работы с массивом, содержащим пустые элементы, лучще использовать функцию each().

Пример использования функции next():

Функция поддерживается PHP 3, PHP 4, PHP 5

prev

Производит перенос курсора назад и возвращает предыдущее значени.

Функция prev() перемещает курсор массива на предыдущий элемент и возвращает его значение. Возвращает false, если элементов больше не осталось.

Также false возвращается, если встречается элемент с пустым значением, следовательно для корректной работы с массивом, содержащим пустые элементы, лучще использовать функцию each().

Пример использования функции prev():

Функция поддерживается PHP 3, PHP 4, PHP 5

current

Определение текущего элемента массива.

Каждый массив имеет внутренний указатель(курсор) текущего элемента. Обычно он указывает на первый элемент массива.

Функция current() возвращает значение элемента, на котором в данный момент находится курсор массива, при этом не сдвигая курсор.

Если указатель находиться за пределами массива, или массив пустой, то функция возвратит FALSE.

Предупреждение: данную функцию нельзя использовать для определения конца массива, т.к. если ячейка пуста, функция так же вернёт false.

Пример использования функции current():

Функция поддерживается PHP 3, PHP 4, PHP 5

pos

Определение текущего элемента массива.

Эта функция синоним функции current().

key

Функция возвращает индекс текущего элемента массива.

Функция key() возвращает индекс текущего элемента массива.

Пример использования функции key():

 "apple", "fruit2" => "orange", "fruit3" => "grape", "fruit4" => "apple", "fruit5" => "apple"); // этот цикл пройдется по всему массиву // и выведет имя ключа элемента массива // значение которого равно "apple" while ($fruit_name = current($array)) < if ($fruit_name == "apple") < echo key($array)."*
"; > next($array); > ?>

Функция поддерживается PHP 3, PHP 4, PHP 5

each

Получение текущего элемента массива.

Функция each() возвращает пару»индекс и значение» текущего элемента массива, на который указывает внутренний курсор, и сдвигает курсор массива на следующий элемент.

Пример использования функции each():

Массив $bar будет иметь ключи и значения:

Array ( [1] => bob [value] => bob [0] => 0 Php массив предыдущий элемент => 0 )
 "Bob", "Seppo" => "Sepi"); $bar = each($foo); print_r($bar); ?>

Массив $bar будет иметь ключи и значения:

Array ( [1] => Bob [value] => Bob [0] => Robert Php массив предыдущий элемент => Robert )

Пример использования функции each():

 "apple", "b" => "banana", "c" => "cranberry"); reset($fruit); while (list($key, $val) = each($fruit)) < echo "$key =>$val"; > ?>
a => apple b => banana c => cranberry

Функция поддерживается PHP 3, PHP 4, PHP 5

array_walk

Применение пользовательской функции к элементам массива.

bool array_walk(array arr, callback function [, mixed userdata])

Функция array_walk() применяет пользовательскую функцию function к каждому элементу массива arr. В пользовательскую функцию передаются три или два (в случае, если аргумент userdata не указан) аргумента: значение текущего элемента, его индекс и аргумент userdata.

В случае, если function требует более трех аргументов, при каждом ее вызове будет выдаваться предупреждение. Чтобы блокировать выдачу этих предупреждений, поставте знак «@» перед функцией array_walk() или воспользуйтесь функцией error_reporting().

Функция function будет получать значения и индексы массива arr по значению, т.е. не сможет вносить в него изменения. Если это необходимо, передайте аргумент arr по ссылке, указав перед его именем «&», и тогда все изменения отразяться в массиве.

В PHP 4 необходимо явно вызывать функцию reset(), чтобы установить внутренний курсор на первый элемент.

Пример использования функции array_walk():

 "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); function test_alter(&$item1, $key, $prefix) < $item1 = "$prefix: $item1"; >function test_print($item2, $key) < echo "$key. $item2
n"; > echo "Before . n"; array_walk($fruits, "test_print"); array_walk($fruits, "test_alter", "fruit"); echo ". and after:n"; array_walk($fruits, "test_print"); ?>

Приведенный пример выведет следующее:

Before . d. lemon a. orange b. banana c. apple . and after: d. fruit: lemon a. fruit: orange b. fruit: banana c. fruit: apple

Функция поддерживается PHP 3 >= 3.0.3, PHP 4, PHP 5

Источник

PHP получает предыдущий элемент массива, зная текущий ключ массива

В моем приложении я знаю текущий ключ (например, 555 ). И я хочу получить предыдущий элемент массива. В этом примере это элемент массива с ключом 430 . Как я могу это сделать в PHP? Я пытался работать с prev() , но для этой функции мы должны знать текущий элемент массива. Я не нашел функцию, которая задает текущий элемент массива.

Чтобы установить внутренний указатель на определенную позицию , вам необходимо переслать его (используя key и next , возможно, выполнить reset до того, как вы начнете с начала массива):

while(key($array) !== $key) next($array); 

Затем вы можете использовать prev() :

$prev_val = prev($array); // and to get the key $prev_key = key($array); 

В зависимости от того, что вы собираетесь делать с массивом впоследствии, вы можете reset внутренний указатель.

Если ключ не существует в массиве, у вас есть бесконечный цикл, но это можно решить с помощью:

 while(key($array) !== null && key($array) !== $key) 

Конечно, prev больше не даст вам правильного значения, но я предполагаю, что ключ, который вы ищете, будет в массиве в любом случае.

Решение с быстрым поиском: (если вам нужно сделать это более одного раза)

$keys = array_flip(array_keys($array)); $values = array_values($array); return $values[$keys[555]-1]; 

array_flip ( array_keys ($array)); вернет ключи сопоставления массива в их положение в исходном массиве, например array(420 => 0, 430 => 1, 555 => 2) .

И array_values () возвращает позиции сопоставления массива значениям, например array(0 => /* value of $array[420] */, . ) .

Таким образом, $values[$keys[555]-1] эффективно возвращает предыдущие элементы, учитывая, что текущий имеет ключ 555.

$keys = array_keys($array); return $array[$keys[array_search(555, $keys)-1]]; 

Я решил эту проблему следующим образом:

function getPrevKey($key, $hash = array())

@ вернуть предыдущий ключ или false, если предыдущий ключ недоступен

$myhash = array( 'foo' => 'foovalue', 'goo' => 'goovalue', 'moo' => 'moovalue', 'zoo' => 'zoovalue' ); echo "TEST: ". getPrevKey('zoo', $myhash); // prints moo 

Вы можете перебирать массив в обратном порядке и возвращать следующую итерацию после нахождения значения поиска.

$found = false; foreach(array_reverse($array, true) as $key=>$value) < if ($found) < print "$key =>$value\n"; break; > else if ($key == 555) < $found = true; >> 

Просто перебирайте массив

$_index = null; foreach($myarray as $index => $value) < if($key == $my_index) // if($key == 550) < break; >$_index = $index; > echo $_index; //the prev key from 550; 

Альтернативным решением является получение ключей вашего массива в перечислимом массиве следующим образом:

поскольку массив ключей является индексом, вы можете переместить предыдущий ключ так:

$required_key = (array_search(550,$keys,true) - 1); 

это будет штрафовать значение 550 и вернуть его индекс в ключи, удалить его, чтобы получить предыдущий индекс

у нас есть наш предыдущий ключ, чтобы получить значение из исходного массива

$value = $my_array[$required_key]; 

Решение @Luca Borrione было полезно. Если вы хотите найти предыдущий и следующий ключи, вы можете использовать следующую функцию:

function getAdjascentKey( $key, $hash = array(), $increment ) < $keys = array_keys( $hash ); $found_index = array_search( $key, $keys ); if ( $found_index === false ) < return false; >$newindex = $found_index+$increment; // returns false if no result found return ($newindex > 0 && $newindex
// previous key getAdjascentKey( $key, $hash, -1 ); // next key getAdjascentKey( $key, $hash, +1 ); 
$myhash = array( 'foo' => 'foovalue', 'goo' => 'goovalue', 'moo' => 'moovalue', 'zoo' => 'zoovalue' ); getAdjascentKey( 'goo', $myhash, +1 ); // moo getAdjascentKey( 'zoo', $myhash, +1 ); // false getAdjascentKey( 'foo', $myhash, -1 ); // false 

Это простое решение для приема предыдущих и следующих элементов, даже если мы находимся в конце массива.

 else < // if not take the first (this means this is the end of the array) $array_next = $array[0]; >if (isset($array[$current_key-1])) < // get the previous item if there is $array_prev = $array[$current_key-1]; >else < // if not take the last item (this means this is the beginning of the array) $array_prev = $array[count($array)-1]; > 

Расширяясь далее по решению Luca Borrione и cenk, чтобы вы могли обернуть вокруг конца массива в любом направлении, вы можете использовать:

function getAdjascentKey($key, $hash = array(), $increment) < $keys = array_keys($hash); $found_index = array_search($key, $keys); if ($found_index === min(array_keys($keys)) && $increment === -1) < $found_index = max(array_keys($keys))+1; >if ($found_index === max(array_keys($keys)) && $increment === +1) < $found_index = min(array_keys($keys))-1; >return $keys[$found_index+$increment]; > 

Источник

Как в foreach выбрать предыдущий элемент?

Рекурсия: после отработки вложенной функции foreach перестает делать предыдущий обход
Всем привет! Делаю иерархию БД. Проблема в следующем: после отработки вложенной функции foreach.

Как сделать один элемент в foreach?
<?php $is_tovar=; foreach ($is_tovar as $value) :?> <li .

Как получить последний элемент в foreach в переменную?
Как получить последний элемент в foreach в переменную.

$prevValue = null; foreach($arFields as $key => $value){ if($_SESSION['CURRENT_ID'] == $value['ID']) { // вот тут надо выбрать предыдущий элемент ( $prevValue ) } $prevValue=$value; }

WhiteMind, спасибо, а подскажите как сделать, что бы при обновление страницы юзером сессия сбросилась?

т.е. у меня на странице есть вот такая кнопка

и если я покликаю на нее раза 2-3, то в сессии будет записан ID тура, поэтому при обновлении страницы или возврату к ней с другой страницы будет открыт тур, до которого дошел юзер кликая на «Показать еще». Мне нужно, что бы при обновлении страницы или переходе с другой страницы сессия рушила

Добавлено через 7 минут
сам код такой

1 2 3 4 5 6 7 8 9 10 11 12 13
for($i=0;$icount($arFields);$i++){ if(empty($_SESSION['CURRENT_ID'])) { // если до этого сессия была пустая session_start(); // начнем сессию и будем хранить там ID текущего тура $_SESSION['CURRENT_ID'] = array_pop($arFields); // а так же текущий ID станет последним $currentID = $_SESSION['CURRENT_ID']; } elseif($_SESSION['CURRENT_ID'] == $arFields[$i]) { $_SESSION['CURRENT_ID'] = $arFields[--$i]; $currentID = $_SESSION['CURRENT_ID']; } elseif($_SESSION['CURRENT_ID'] == $arFields[0]) { $currentID = $_SESSION['CURRENT_ID']; session_destroy(); } }

Источник

Читайте также:  Вывод всех элементов массива python
Оцените статью