Foros del Web » Programando para Internet » PHP »

Borrar fila de un array asociativo

Estas en el tema de Borrar fila de un array asociativo en el foro de PHP en Foros del Web. Buenos días a todos!! Tengo el siguiente código que me crea una tabla con los elementos que voy añadiendo al array creado con una sesion. ...
  #1 (permalink)  
Antiguo 30/11/2012, 09:39
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
Borrar fila de un array asociativo

Buenos días a todos!!

Tengo el siguiente código que me crea una tabla con los elementos que voy añadiendo al array creado con una sesion.
Código PHP:
<?php 
    
if(empty($_SESSION['carro'][$_POST['idp']]))
    {
        
$_SESSION['carro'][$_POST['idp']] = array(
        
'idp'      => $_POST['idp'],
        
'producto' => $_POST['producto'],
        
'precio'   => $_POST['precio']
        );
        echo 
"Ha salido bien";
    }
    else
    {
        echo 
"El producto ya está añadido <br />";
    }
    
?>    
    <table>
    <?php
    
//print_r($_SESSION['carro'])."<br />";
    
    //var_dump($_SESSION['carro']); 
    
foreach($_SESSION['carro'] as $k => $v)
      { 
    
?>
      <tr>
        <td><?php echo $v['idp'];?></td>
        <td><?php echo $v['producto'];?></td>
        <td><?php echo $v['precio'];?></td>

// Con la línea inferior quiero borrar una fila del array

        <td><a href="#"onclick="<?php unset($v['idp']);?>">Borrar</a></td>
        
      </tr>
    <?php ?>    
    </table>
Pero no se como borrar una línea de datos, por ejemplo la siguiente:
idp - producto - precio
01 - Cigarros el Pollo - 2€

Muchas gracias
  #2 (permalink)  
Antiguo 30/11/2012, 09:41
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Borrar fila de un array asociativo

Tienes la instrucción unset(), con la cual puedes eliminar elementos de un array.

Sin embargo necesitas conocer la clave o índice para poder borrar el elemento, si no sabes cual es podría usar array_search() o algún loop personalizado para hallar la clave y proceder.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 30/11/2012, 09:47
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Respuesta: Borrar fila de un array asociativo

Eso no te va funcionar puesto que lo que requieres, se tiene que ejecutar del lado del servidor y no del cliente. Por que tendrias que recargar la página o bien hacer uso de ajax.


Saludos.
  #4 (permalink)  
Antiguo 30/11/2012, 10:55
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 11 años, 4 meses
Puntos: 10
Respuesta: Borrar fila de un array asociativo

Hola yo creo que simplemente puedes enviar por post o pof get

Por ejemplo por get

?mode=delete&item=id

Código PHP:
if($_GET['mode']=="delete" && $_GET['item']!="" && is_array($_SESSION['carro'][$_GET['item']]))
    unset(
$_SESSION['carro'][$_GET['item']]); 
Si quieresd hacerlo por ajax ya tiene más tela sería algo asi:

Código PHP:
 <td id="borra<?php unset($v['idp']);?>"><a href="JavaScript:borra('<?php unset($v['idp']);?>')">Borrar</a></td> 
<script>
//esta función sólo una vez no la pongas dentro del foreach sino antes o despues...
function borra(num)
{

        if (window.XMLHttpRequest)
        {
            xmlhttp=new XMLHttpRequest();
        }
        else
        {
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        
        xmlhttp.open("GET", "borra.php?mode=delete&item=" +num, true);
        xmlhttp.send();    
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            var xml = xmlhttp.responseXML;
            dato=xml.getElementsByTagName("datos");
            if(dato[0].firstChild.nodeValue=="1")
            {
                  //borramos td
                  document.getElementById('borra' +num).innerHTML="";
            }            
        }
    }
}
</script>
Y el php que recibe:

Código PHP:
<?php
session_start
();
header('Content-Type: text/xml');
$xml="<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
$xml.="<respuesta>\n";

if(
$_GET['mode']=="delete" && $_GET['item']!="" && is_array($_SESSION['carro'][$_GET['item']]))
{
       unset(
$_SESSION['carro'][$_GET['item']]);
        
$xml.="<datos><![CDATA[1]]></datos>\n"
}
else
{
   
$xml.="<datos><![CDATA[0]]></datos>\n"
}
$xml.="</respuesta>\n";
print 
$xml;
?>
No sé si he cometido algún error, pero en fin con ajax es crear un id en el elemento td para poder borrar, en href del enlace llamar a una función javascript que comunica con un script en php llamado borrar.php, al que se le pasa por get un numero con el id del array a borrar y un mode.

Si se puede borrar porque el indice a borrar existe se devuelve por xml un 1 y javascript borra el contenido del td

Salu2 ;)
  #5 (permalink)  
Antiguo 30/11/2012, 11:05
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 11 años, 4 meses
Puntos: 10
Respuesta: Borrar fila de un array asociativo

Vale ahora que miro habia un error, aqui va la forma correcta
Código PHP:
<table>
    <?php
    
//print_r($_SESSION['carro'])."<br />";
    
    //var_dump($_SESSION['carro']); 
    
foreach($_SESSION['carro'] as $k => $v)
      { 
    
?>
      <tr id="borra<?php echo $v['idp'];?>">
        <td><?php echo $v['idp'];?></td>
        <td><?php echo $v['producto'];?></td>
        <td><?php echo $v['precio'];?></td>

// Con la línea inferior quiero borrar una fila del array

        <td><a href="JavaScript:borra('<?php echo($v['idp']);?>')">Borrar</a></td>
        
      </tr>
    <?php ?>
El javascript se quedaría igual, pero en fin solo es para que veas la forma
Salu2 ;)
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:30.