¿Cuál sería la forma más eficiente de seleccionar cada enésimo elemento de una matriz grande? ¿Hay una manera "inteligente" de hacerlo o está girando de la única manera?Seleccionar cada enésimo elemento de una matriz
Algunos puntos a considerar:
- La matriz es bastante grande, con 130 000 unidades
- tengo que seleccionar cada artículo 205a
- Los artículos no están indexados numéricamente, por lo que no va a funcionar
for($i = 0; $i <= 130000; $i += 205)
hasta ahora, este es el método más eficiente que he llegado con:
$result = array();
$i = 0;
foreach($source as $value) {
if($i >= 205) {
$i = 0;
}
if($i == 0) {
$result[] = $value;
}
$i++;
}
O lo mismo con módulo:
$result = array();
$i = 0;
foreach($source as $value) {
if($i % 205 == 0) {
$result[] = $value;
}
$i++;
}
Estos métodos pueden ser bastante lento, ¿hay alguna manera de mejorar? ¿O acabo de dividir los pelos aquí?
EDITAR
buenas respuestas de todo con explicaciones adecuadas, trataron de escoger el más adecuado como la respuesta aceptada. ¡Gracias!
Eso me parece razonable: ¿está seguro de que el código está causando cuellos de botella? Si no, ¡perfúlalo para ver! ¿Cuánto tiempo se tarda? –
@Dominic, esto no es tanto un cuello de botella, solo un problema interesante para el que no pude encontrar una solución adecuada. No crea que una respuesta 'correcta' afeitaría más de unos pocos milisegundos de tiempo de ejecución, pero sería bueno saberlo. :) –