How to set an Arrays internal pointer to a specific position? PHP/XML
If your array is always indexed consistently (eg. 'page1' is always at index '0'), it's fairly simple:
$List = array('page1', 'page2', 'page3', 'page4', 'page5');$CurrentPage = 3; // 'page4'while (key($List) !== $CurrentPage) next($List); // Advance until there's a match
I personally don't rely on automatic indexing because there's always a chance that the automatic index might change. You should consider explicitly defining the keys:
$List = array( '1' => 'page1', '2' => 'page2', '3' => 'page3',);
EDIT: If you want to test the values of the array (instead of the keys), use current()
:
while (current($List) !== $CurrentPage) next($List);
Using the functions below, you can get the next and previous values of the array.If current value is not valid or it is the last (first - for prev) value in the array, then:
- the function getNextVal(...) returns the first element value
- the function getPrevVal(...) returns the last element value
The functions are cyclic.
function getNextVal(&$array, $curr_val){ $next = 0; reset($array); do { $tmp_val = current($array); $res = next($array); } while ( ($tmp_val != $curr_val) && $res ); if( $res ) { $next = current($array); } return $next;}function getPrevVal(&$array, $curr_val){ end($array); $prev = current($array); do { $tmp_val = current($array); $res = prev($array); } while ( ($tmp_val != $curr_val) && $res ); if( $res ) { $prev = current($array); } return $prev;}
Using the functions below, you can get the next and previous KEYs of the array.If current key is not valid or it is the last (first - for prev) key in the array, then:
- the function getNext(...) returns 0 (the first element key)
- the function getPrev(...) returns the key of the last array element
The functions are cyclic.
function getNext(&$array, $curr_key){ $next = 0; reset($array); do { $tmp_key = key($array); $res = next($array); } while ( ($tmp_key != $curr_key) && $res ); if( $res ) { $next = key($array); } return $next;}function getPrev(&$array, $curr_key){ end($array); $prev = key($array); do { $tmp_key = key($array); $res = prev($array); } while ( ($tmp_key != $curr_key) && $res ); if( $res ) { $prev = key($array); } return $prev;}