vaciar - php borrar un array
Cómo eliminar una variable de una matriz de sesión de PHP (6)
Tengo un código PHP que se usa para agregar variables a una sesión:
<?php
session_start();
if(isset($_GET[''name'']))
{
$name = isset($_SESSION[''name'']) ? $_SESSION[''name''] : array();
$name[] = $_GET[''name''];
$_SESSION[''name''] = $name;
}
if (isset($_POST[''remove'']))
{
unset($_SESSION[''name'']);
}
?>
<pre> <?php print_r($_SESSION); ?> </pre>
<form name="input" action="index.php?name=<?php echo $list ?>" method="post">
<input type="submit" name ="add"value="Add" />
</form>
<form name="input" action="index.php?name=<?php echo $list2 ?>" method="post">
<input type="submit" name="remove" value="Remove" />
</form>
Quiero eliminar la variable que se muestra en $list2
del conjunto de sesiones cuando el usuario elige ''Eliminar''.
Pero cuando desactivo, TODAS las variables de la matriz se eliminan.
¿Cómo puedo eliminar solo una variable?
¿Es la variable $ _SESSION [''name''] una matriz? Si desea eliminar una clave específica dentro de una matriz, debe referirse a esa clave exacta en la llamada unset (); de lo contrario, eliminará la matriz completa, por ej.
$name = array(0 => ''a'', 1 => ''b'', 2 => ''c'');
unset($name); // deletes the entire array
unset($name[1]); // deletes only the ''b'' entry
Otro problema menor con tu fragmento: estás mezclando los parámetros de consulta GET con un formulario POST. ¿Hay alguna razón por la cual no puedes hacer los formularios con el ''nombre'' pasado en un campo oculto? Lo mejor es no mezclar las variables get y post, especialmente si usa $ _REQUEST en otro lugar. Puede encontrarse con todo tipo de diversión tratando de descubrir por qué $ _GET [''name''] no aparece igual que $ _POST [''name''], porque el servidor tiene una orden diferente de EGPCS establecida en el ''variables_order'' Ajuste de .ini
<form blah blah blah method="post">
<input type="hidden" name="name" value="<?= htmlspecialchars($list1) ?>" />
<input type="submit" name="add" value="Add />
</form>
Y tenga en cuenta la llamada htmlspecialchars (). Si $ list1 o $ list2 contienen una comilla doble ("), romperá su HTML
Para eliminar una variable específica de la sesión, use:
session_unregister(''variableName'');
( ver documentación ) o
unset($_SESSION[''variableName'']);
NOTA: session_unregister()
ha sido DEPURADO a partir de PHP 5.3.0 y eliminado a partir de PHP 5.4.0.
Prueba este:
if(FALSE !== ($key = array_search($_GET[''name''],$_SESSION[''name''])))
{
unset($_SESSION[''name''][$key]);
}
Actualmente está borrando la matriz de nombres, necesita llamar a la matriz y luego al índice que desea desarmar dentro de la matriz:
$ar[0]==2
$ar[1]==7
$ar[2]==9
unset ($ar[2])
Dos formas de deshacer valores dentro de una matriz:
<?php
# remove by key:
function array_remove_key ()
{
$args = func_get_args();
return array_diff_key($args[0],array_flip(array_slice($args,1)));
}
# remove by value:
function array_remove_value ()
{
$args = func_get_args();
return array_diff($args[0],array_slice($args,1));
}
$fruit_inventory = array(
''apples'' => 52,
''bananas'' => 78,
''peaches'' => ''out of season'',
''pears'' => ''out of season'',
''oranges'' => ''no longer sold'',
''carrots'' => 15,
''beets'' => 15,
);
echo "<pre>Original Array:/n",
print_r($fruit_inventory,TRUE),
''</pre>'';
# For example, beets and carrots are not fruits...
$fruit_inventory = array_remove_key($fruit_inventory,
"beets",
"carrots");
echo "<pre>Array after key removal:/n",
print_r($fruit_inventory,TRUE),
''</pre>'';
# Let''s also remove ''out of season'' and ''no longer sold'' fruit...
$fruit_inventory = array_remove_value($fruit_inventory,
"out of season",
"no longer sold");
echo "<pre>Array after value removal:/n",
print_r($fruit_inventory,TRUE),
''</pre>'';
?>
Por lo tanto, unset no tiene efecto en el contador interno de la matriz.
Si quiere eliminar o desconectar todos los $ _SESSION, intente esto
session_destroy();
Si desea eliminar $ _SESSION específico [''nombre''], intente esto
session_unset(''name'');
if (isset($_POST[''remove''])) {
$key=array_search($_GET[''name''],$_SESSION[''name'']);
if($key!==false)
unset($_SESSION[''name''][$key]);
$_SESSION["name"] = array_values($_SESSION["name"]);
}
Como $_SESSION[''name'']
es una matriz, debe encontrar la clave de la matriz que apunta al valor del nombre que le interesa. La última línea reorganiza el índice de la matriz para el siguiente uso.