Foros del Web » Programando para Internet » PHP »

borrar posicion de un array php sin usar unset()

Estas en el tema de borrar posicion de un array php sin usar unset() en el foro de PHP en Foros del Web. Buenas Mi problema es que tengo que brorrar una posicion de un array, pero no me vale con unset() , ya que esta función deja ...
  #1 (permalink)  
Antiguo 23/09/2005, 05:54
Avatar de tycho  
Fecha de Ingreso: marzo-2005
Ubicación: Linares
Mensajes: 48
Antigüedad: 12 años, 9 meses
Puntos: 0
Pregunta borrar posicion de un array php sin usar unset()

Buenas

Mi problema es que tengo que brorrar una posicion de un array, pero no me vale con unset(), ya que esta función deja la posicion vacía, y a mí lo que me interesa es que desaparezca, es decir:

si tengo un array con tres posiciones:

Código PHP:
<?php
$vector
[1] = "pepe";
$vector[2] = "jose";
$vector[3] = "mateo";

unset(
$vector[2]);
?>
imprimiría:

$vector[1] --> pepe
$vector[2] -->
$vector[3] --> mateo

y yo quiero que quede así:

$vector[1] --> pepe
$vector[2] --> mateo

a ver si alguien sabe alguna funcion en php, porque yo no la encuentro.

Gracias
  #2 (permalink)  
Antiguo 23/09/2005, 06:48
 
Fecha de Ingreso: octubre-2004
Mensajes: 751
Antigüedad: 13 años, 2 meses
Puntos: 4
Bueno, yo tuve el mismo problema que tu y lo que hago es lo siguiente:

Código PHP:
unset($array[$i]);
$array array_values($array);//quito el espacio que ha quedado despues de eliminarse 
Ya se que se usa unset() pero luego se rectifica el problema. Yo no conozco ninguna otra opción.

Saludos,

PD. Para más información www.php.net/array_values
__________________
sergiold
  #3 (permalink)  
Antiguo 23/09/2005, 06:49
Avatar de elangelcaido  
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 1.068
Antigüedad: 14 años, 3 meses
Puntos: 4
Me imagino que estas usando un bucle para mostrar el contenido de tu array. Pues lo unico que tienes que hacer es poner una condicion (if) dentro del bucle para que si lee el que tu quieres que no muestre que de un salto.
Por ejemplo:
Código PHP:
//Esto te mostraria todos menos el de la posicion 2 del vector
for($i=0;$i<count($vector);$i++){
    if(
$vector[$i]!=2){
        echo 
$vector[$i];
    }

__________________
Ta Luego! Al final sólo puede quedar uno...
________
lukos.org
  #4 (permalink)  
Antiguo 23/09/2005, 08:55
Avatar de tycho  
Fecha de Ingreso: marzo-2005
Ubicación: Linares
Mensajes: 48
Antigüedad: 12 años, 9 meses
Puntos: 0
ok, sergiold

gracias por vuestra ayuda. Al final me decanto por la opción de sergiold:

Código PHP:
<?php
$array
[1] = "jose";
 
$array[2] = "mateo";
 
$array[3] = "manuel";
 
$array[4] = "pepon";
 
$array[5] = "kata";
 
unset(
$array[1]);   //borro las posiciones 1 y 4
unset ($array[4]); 

$array array_values($array);
for(
$i=0;$i<=count($array);$i++){    //importante ponerlo a partir de i=0
echo $array[$i];
}
?>
Saludos
  #5 (permalink)  
Antiguo 23/09/2005, 11:21
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 14 años, 6 meses
Puntos: 3
Otra opción y sin usar unset(), por si os interesa, es con la función array_filter() (supongo que habrán más formas de hacerlo):

Código PHP:
<?php
$array
[0] = "jose";   // Eliminarlo
$array[1] = "mateo"
$array[2] = "manuel"
$array[3] = "pepon"// Eliminarlo
$array[4] = "kata"

function 
filtrar($elemActual) {
    return (
$elemActual != "jose" && $elemActual != "pepon");
}

$array array_filter($array"filtrar"); 
$array array_values($array);
print_r($array);
?>
array_filter() va aplicando una función callback de filtro llamada filtrar() a cada elemento del array uno por uno. Si la condición del filtro es 1 o true, vuelve a almacenar el valor en su posición. Si es 0 o false, lo elimina (pero no elimina la posición). Como sigue manteniendo los mismos índices, se usa al igual que en la solución anterior la función array_values() que reagrupa los elementos con valor.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 16:18.