Question

I have a session of arrays named:

$_SESSION['A'];

it contains

$_SESSION['A'][0] = 'A';
$_SESSION['A'][1] = 'B';

I can unset the $_SESSION['A']; using

unset($_SESSION['A']);

it unset all the value in the array how can I unset all value stored in

$_SESSION['A']; 

exept

$_SESSION['A'][0];
$_SESSION['A'][1];

I've seen this POST

which it unset all $_SESSION exept some stored in array. I used this code to unset it on array but I don't know how to used it as arrays.

$keys = array('x', 'y');
$_SESSION = array_intersect_key($_SESSION, array_flip($keys));
Was it helpful?

Solution

use array_slice like this:

$_SESSION['A'] = array_slice($_SESSION['A'], 0, 2);

Update:

Also, for non sequential indexes we can create this function:

  function array_pick($picks, $array)
    {
     $temp = array();
        foreach($array as $key => $value)
        {
            if(in_array($key, $picks))
            {
                $temp[$key] = $value;
            }
        }
     return array_values($temp);// or just $temp to keep original indexes
    }

PHPFiddle

OTHER TIPS

How about:

$keys = array(0,1);
$_SESSION['A'] = array_intersect_key($_SESSION['A'], array_flip($keys));

And here's the proof of concept.

You won't be able to do unset only certain values in an array. Rather, just save the values of those variables, unset the entire array and then reset the values.

// Save existing values
$saved_var1 = $_SESSION["A"][0];
$saved_var2 = $_SESSION["A"][1];

// Unset the entire array
unset( $_SESSION["A"] );

// Set the values by the saved variables
$_SESSION["A"] = array(
  $saved_var1,
  $saved_var2
);

You can even use array_splice()

$_SESSION['A']=array_splice($_SESSION['A'], 2);

try this

$_SESSION['A'] = array();
unset($_SESSION['A']);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top