2011-01-17 8 views
12

HI allí,PHP: obtenga registros de matriz por rango de índice

¿Hay alguna función nativa de PHP que devuelva el rango de registros de la matriz según el inicio y el final del índice?

es decir .:

array(0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd'); 

y ahora me gustaría sólo para volver registros entre el índice de 1 y 3 (b, c, d).

¿Alguna idea?

+3

este qu estion es sinónimo de "PHP array_slice" http://us3.php.net/manual/en/function.array-slice.php – dreftymac

Respuesta

20

¿No podría hacerlo con, por ejemplo,? array_slice?

$a = array(0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd'); 
array_slice($a, 1, 3); 
11

no es una tarea para array_slice

array array_slice (array $array , int $offset [, int $length [, bool $preserve_keys = false ]])

ejemplo:

 
$input = array("a", "b", "c", "d", "e"); 

$output = array_slice($input, 2);  // returns "c", "d", and "e" 
$output = array_slice($input, -2, 1); // returns "d" 
$output = array_slice($input, 0, 3); // returns "a", "b", and "c" 

// note the differences in the array keys 
print_r(array_slice($input, 2, -1)); 
print_r(array_slice($input, 2, -1, true)); 
+0

apreciar la variedad de ejemplos –

-2
$array1 = array(1,2,3,4,5,6,23,24,26,21,12); 

    foreach(range ($array1[0],$array1[5]) as $age){ 
     echo "Age: {$age}<br />"; 
    } 

que debe obtener el siguiente resultado:

Edad: 1

Edad: 2

Edad: 3

Edad: 4

Edad: 5

Edad: 6

+1

Downvote. Esta es una respuesta de baja calidad que no será portátil en casos no consecutivos. En esta [demo] (http://sandbox.onlinephpfunctions.com/code/e8b81d0e2d721fdfaede35b520d1304c6d647a6c), puede ver que su método falla miserablemente cuando hay lagunas en los valores de la matriz. 'range()' fabrica valores donde no hay valores en la matriz. Aquí está la falla usando su propia entrada: [Demo2] (http://sandbox.onlinephpfunctions.com/code/c5c9f746346168de06cac24c5429dc9a4f00d2d0) Elimine esta respuesta. 'array_slice()' y 'array_intersect_key()' son los métodos más sensibles. – mickmackusa

1

Mediante el uso de array_intersect_key

$myArray = array(0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd'); 
$arrayRange = array('1', '2', '3'); 

// this can also be used if you have integer only array values 
// $arrayRange = range(1,3); 

$newArray = array_intersect_key($myArray, array_flip($arrayRange)); 

print_r($newArray); // output: Array ([1] => b [2] => c [3] => d) 
Cuestiones relacionadas