the_tags tag name get_the_tags get_the_tag_list first all php for-loop

php - tag - como saltar elementos en el bucle foreach



the_tags wordpress (7)

Cinco soluciones vienen a la mente:

Doble direccionamiento a través de array_keys

El problema con los bucles for es que las claves pueden ser cadenas o no números continuos, por lo tanto, debe usar "direccionamiento doble" (o "búsqueda de tabla", llámelo como desee) y acceder a la matriz a través de una matriz de sus claves.

// Initialize 25 items $array = range( 1, 25, 1); // You need to get array keys because it may be associative array // Or it it will contain keys 0,1,2,5,6... // If you have indexes staring from zero and continuous (eg. from db->fetch_all) // you can just omit this $keys = array_keys($array); for( $i = 21; $i < 25; $i++){ echo $array[ $keys[ $i]] . "/n"; // echo $array[$i] . "/n"; // with continuous numeric keys }

Saltar registros con foreach

No creo que esta sea una buena forma de hacerlo (excepto en el caso de que tengas ARRILLOS GRANDES y cortarlos o generar un conjunto de claves utilizaría una gran cantidad de memoria, lo que definitivamente no es 68), pero quizás trabajo: :)

$i = 0; foreach( $array as $key => $item){ if( $i++ < 21){ continue; } echo $item . "/n"; }

Usando el segmento de matriz para obtener la subparte o matriz

Simplemente obtenga un trozo de matriz y úselo en el bucle foreach normal

$sub = array_slice( $array, 21, null, true); foreach( $sub as $key => $item){ echo $item . "/n"; }

Usando next()

Si pudiera configurar el puntero de matriz interno a 21 (digamos que en el bucle anterior foreach con ruptura interna, $array[21] no funciona, verifiqué: P) podría hacer esto (no funcionará si los datos están array === false ):

while( ($row = next( $array)) !== false){ echo $row; }

por cierto: me gusta más la respuesta de hakre.

Usando ArrayIterator

Probablemente estudiar documentación es el mejor comentario para este.

// Initialize array iterator $obj = new ArrayIterator( $array); $obj->seek(21); // Set to right position while( $obj->valid()){ // Whether we do have valid offset right now echo $obj->current() . "/n"; $obj->next(); // Switch to next object }

Quiero saltar algunos registros en un bucle foreach.

Por ejemplo, hay 68 registros en el bucle. ¿Cómo puedo omitir 20 registros y comenzar desde el registro # 21?


No estoy seguro de por qué usaría un foreach para este objetivo, y sin su código es difícil decir si este es el mejor enfoque. Pero, asumiendo que hay una buena razón para usarlo, aquí está la versión más pequeña que se me ocurre:

$count = 0; foreach( $someArray as $index => $value ){ if( $count++ < 20 ){ continue; } // rest of foreach loop goes here }

La continue hace que foreach vuelva al principio y pase al siguiente elemento de la matriz. Es extremadamente útil para ignorar partes de una matriz que no desea que se procesen en un bucle foreach .


No ha dicho qué son realmente los "registros", por lo que, como no sé, asumo que hay un RecordIterator disponible (si no es así, es probable que haya algún otro iterador de ajuste disponible):

$recordsIterator = new RecordIterator($records); $limited = new LimitIterator($recordsIterator, 20); foreach($limited as $record) { ... }

La respuesta aquí es usar foreach con un LimitIterator .

Vea también: Cómo iniciar un bucle foreach en un índice específico en PHP


si desea omitir algún índice, haga una matriz con el índice omitido y verifique mediante la función in_array dentro del bucle foreach si coincide, entonces se omitirá.

Ejemplo:

//you have an array like that $data = array( ''1'' => ''Hello world'', ''2'' => ''Hello world2'', ''3'' => ''Hello world3'', ''4'' => ''Hello world4'', ''5'' => ''Hello world5'',// you want to skip this ''6'' => ''Hello world6'',// you want to skip this ''7'' => ''Hello world7'', ''8'' => ''Hello world8'', ''9'' => ''Hello world8'', ''10'' => ''Hello world8'',//you want to skip this ); //Ok Now wi make an array which contain the index wich have to skipped $skipped = array(''5'', ''6'', ''10''); foreach($data as $key => $value){ if(in_array($key, $skipped)){ continue; } //do your stuf }


for($i = 20; $i <= 68; $i++){ //do stuff }

Esto es mejor que un bucle foreach porque solo recorre los elementos que desea. Pregunta si tienes alguna duda


array.forEach(function(element,index){ if(index >= 21){ //Do Something } });

Elemento sería el valor actual del índice. El índice aumenta con cada vuelta a través del bucle. IE 0,1,2,3,4,5; array [índice];


$i = 0; foreach ($query) { if ($i++ < 20) continue; /* php code to execute if record 21+ */ }