una recorrer posiciones multidimensional modificar matriz intercambiar imprimir hacer elemento ejemplos dibujar crear como arreglos array 3x3 php xml arrays

recorrer - ¿Cómo establecer un puntero interno de matrices en una posición específica? PHP/XML



modificar elemento de un array php (8)

Estoy tratando de construir un sitio pequeño usando XML en lugar de una base de datos.

Me gustaría construir un botón siguiente y anterior que funcione en relación con el contenido que he mostrado.

Encontré la función php next () y prev () así como current () pero no sé cómo configurar el puntero a una posición específica para poder navegar en relación con la página actual.

$list=array(''page1'',''page2'',''page3'')

por ejemplo, si estoy visualizando contenidos de la página 2, ¿cómo podría decirle a php que estoy en $ list [1] para que el próximo ($ list) muestre la página3?

Gracias por adelantado


Aquí está el enfoque completo de @tjunglc con looping:

protected function getPrevNext($aArray,$key) { $aKeys = array_keys($aArray); //every element of aKeys is obviously unique $aIndices = array_flip($aKeys); //so array can be flipped without risk $i = $aIndices[$key]; //index of key in aKeys if ($i > 0) $prev = $aArray[$aKeys[$i-1]]; //use previous key in aArray if ($i < count($aKeys)-1) $next = $aArray[$aKeys[$i+1]]; //use next key in aArray if (!isset($prev)) $prev = end($aArray); if (!isset($next)) $next = reset($aArray); return array($prev,$next); }

Ah, y gracias @tjunglc por esto :)


El puntero de matriz interno se utiliza principalmente para recorrer una matriz dentro de un script PHP. No recomendaría usarlo para pasar de una página a otra.

Para eso, solo haga un seguimiento del número de página y el tamaño de página (número de elementos por página). Luego, cuando está cargando otra página, puede usarla para decidir qué elementos de la matriz mostrar. Por ejemplo:

$pageNum = $_GET["pageNum"]; $pageSize = 10; $startIndex = ($pageNum - 1) * $pageSize; $endIndex = ($startIndex + $pageSize) - 1;

(o algo similar)


Prueba esto

public function getNextVal(&$array, $curr_val){ foreach($array as $k=>$v){ if($v[''your_key''] == $curr_val){ if(isset($array[$k+1])) return $array[$k+1]; else return $array[0]; } } } public function getPrevVal(&$array, $curr_val){ foreach($array as $k=>$v){ if($v[''your_key''] == $curr_val){ if(isset($array[$k-1])) return $array[$k-1]; else return end($array); } } }

para una matriz como esta:

array (size=3) 0 => array (size=11) ''id'' => string ''21'' (length=2) ''cat'' => string ''1'' (length=1) ''gal'' => string ''1'' (length=1) ''type'' => string ''image'' (length=5) ''name'' => string ''chalk_art_dies-irea_2nd_pic'' (length=27) ''permalink'' => string ''chalk-art-dies-irea-2nd-pic'' (length=27) ''url'' => string ''rxNsPoEiJboJQ32.jpg'' (length=19) ''content'' => string '''' (length=0) ''date'' => string ''1432076359'' (length=10) ''order'' => string ''20'' (length=2) ''views'' => string ''0'' (length=1) 1 => array (size=11) ''id'' => string ''10'' (length=2) ''cat'' => string ''1'' (length=1) ''gal'' => string ''1'' (length=1) ''type'' => string ''image'' (length=5) ''name'' => string ''3dchalkart'' (length=10) ''permalink'' => string ''3dchalkart'' (length=10) ''url'' => string ''s57i5DKueUEI4lu.jpg'' (length=19) ''content'' => string '''' (length=0) ''date'' => string ''1432076358'' (length=10) ''order'' => string ''9'' (length=1) ''views'' => string ''0'' (length=1) 2 =>


Si su matriz siempre está indexada de forma coherente (por ejemplo, ''página1'' siempre está en el índice ''0''), es bastante simple:

$List = array(''page1'', ''page2'', ''page3'', ''page4'', ''page5''); $CurrentPage = 3; // ''page4'' while (key($List) !== $CurrentPage) next($List); // Advance until there''s a match

Personalmente, no confío en la indexación automática porque siempre existe la posibilidad de que el índice automático cambie. Debe considerar definir explícitamente las claves:

$List = array( ''1'' => ''page1'', ''2'' => ''page2'', ''3'' => ''page3'', );

EDITAR: Si desea probar los valores de la matriz (en lugar de las claves), use current() :

while (current($List) !== $CurrentPage) next($List);


Usando las funciones a continuación, puede obtener las LLAVES siguiente y anterior de la matriz. Si la clave actual no es válida o es la última ( primera - para previa ) clave en la matriz, entonces:

  • la función getNext (...) devuelve 0 (la primera tecla del elemento)
  • la función getPrev (...) devuelve la clave del último elemento de matriz

Las funciones son cíclicas

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; }


Usando las funciones a continuación, puede obtener los valores siguientes y anteriores de la matriz. Si el valor actual no es válido o es el último ( primero para el anterior ) valor en la matriz, entonces:

  • la función getNextVal (...) devuelve el primer valor del elemento
  • la función getPrevVal (...) devuelve el último valor del elemento

Las funciones son cíclicas

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; }


Uso este código para establecer el puntero interno con la clave de la matriz.

reset($List); while (key($List) !== $id && key($List) !== null) next($List); if(key($List) === null) end($List);

Después de eso, puede usar prev () o next ().

Actualizar aviso de seguimiento de @VaclavSir


otro enfoque sin bucles o búsqueda.

list($prev,$next) = getPrevNext($oObjects,$sCurrentKey); function getPrevNext($aArray,$key){ $aKeys = array_keys($aArray); //every element of aKeys is obviously unique $aIndices = array_flip($aKeys); //so array can be flipped without risk $i = $aIndices[$key]; //index of key in aKeys if ($i > 0) $prev = $aArray[$aKeys[$i-1]]; //use previous key in aArray if ($i < count($aKeys)-1) $next = $aArray[$aKeys[$i+1]]; //use next key in aArray return array($prev,$next); }