2011-05-05 16 views
7

Tengo problemas para entender exactamente lo que hacen array_splice y array_slice. Por lo que puedo decir array_splice debería devolver una matriz DESPUÉS de sacar ciertos elementos y array_slice debería recuperar una porción de la matriz.Array_splice actuando como array_slice?

El siguiente código del manual php.net/array_splice muestra que este código debería funcionar.

$input = array("red", "green", "blue", "yellow"); 
var_dump(array_splice($input, 2)); 
// $input is now array("red", "green") 

$input = array("red", "green", "blue", "yellow"); 
var_dump(array_slice($input, 2)); 
// $input is now array("red", "green") 

Sin embargo, cuando ejecuta este código en PHP 5.3.4 y 5.1.6 son los resultados

array 
    0 => string 'blue' (length=4) 
    1 => string 'yellow' (length=6) 
array 
    0 => string 'blue' (length=4) 
    1 => string 'yellow' (length=6) 

¿Estoy malentendido el manual o es esto un error? A mi me parece como array_splice está actuando como array_slice

Además, no parece hacer reemplazos

$input = array("red", "green", "blue", "yellow"); 
var_dump(array_splice($input, 2, 2, array('foo'))); 

salidas

array 
    0 => string 'blue' (length=4) 
    1 => string 'yellow' (length=6) 

Puede alguien confirmar esto es un error y si no explica cómo ¿Esto debería funcionar?

EDIT:

Nvm lo he descubierto. En lugar de usar var_dump en array_splice, debería estar usando $ input, ya que array_splice cambia $ input en lugar de devolver los nuevos valores.

array_slice devuelve los valores, mientras que array_splice establece los valores en $ input.

MODs cerrar o eliminar esto.

Respuesta

8

De the docs:

Descripción
array array_splice (array & $ de entrada, int $ desplazamiento [, int $ longitud = 0 [, mixed $ sustitución]])

Elimina el elementos designados por desplazamiento y longitud desde la matriz de entrada, y los reemplaza con los elementos de la matriz de reemplazo, si se suministra. Valores

...

Volver

Devuelve la matriz formada por los elementos extraídos.

Estás horriblemente, terriblemente confundido.

+3

Sí, me di cuenta de eso justo después de acceder a la publicación. Larga mañana sin café todavía. Como su publicación explica lo que se me ocurrió, marcaré como la respuesta. Tienes razón ... estábamos muy confundidos. – Bot

0

En el primer ejemplo de código del estado comentario de que lo que se deja en la variable $input es array("red", "green") pero no menciona el contenido devuelto por el var_dump que es lo que sus pruebas no devolvió

3

empalme elimina un subconjunto de elementos de matriz e inserta nuevos elementos en su ubicación básicamente reemplazándolos. slice solo tira de un subconjunto de elementos de la matriz en una matriz separada.

Donde está mal entendido es que el resultado del corte se devuelve de la función como una matriz separada, donde el empalme realmente manipula la matriz que se pasa como el argumento.

Cuestiones relacionadas