Aayush
Aayush

Reputation: 221

How to store an array into a session variable in php

//Returns 10 question from questions table

$result = mysqli_query($con,"SELECT question FROM questions ORDER BY rand() LIMIT 10' ");
while($row = mysqli_fetch_row($result))
{
$que[]=$row[0];
}  

Now I need to store this whole set of $que[] in a session variable. (i.e 10 questions)

Something like this

$_SESSION['question'] = $que[]; 

$my_array[] = $_SESSION['question'];

so that $my_array[0] returns first question, $my_array[1] returns second questions and like that.

(Thanx for the help in advance)

Upvotes: 9

Views: 68396

Answers (3)

Dabby
Dabby

Reputation: 5

use

session_start();
 $_SESSION['question'] = $que;
&que = array(an array of your 10m question s);

when your want to call it on another page to get a line up of your questions, use

while (list($key, $value) = each($_SESSION)) {
#Echo the questions using $key
    echo "Here is a list of your questions";
    echo "<br/>";
    while (list($key2, $value2) = each($_SESSION)) {
#$value2 show's name for the indicated ID
#$key2 refers to the ID
         echo "<br/>";
        echo "Question: ".$value2." ";
        echo "<br/>";
    }
    echo "<br/>"; 
}

OR you can also use

print_r;

Upvotes: 2

Prasanth Bendra
Prasanth Bendra

Reputation: 32710

Assign

$_SESSION['question'] = $que; 

print_r($_SESSION['question'][0]); will give you first question.

Upvotes: 12

Jason
Jason

Reputation: 1962

You are almost correct, you only need the [] when adding to the array.

$_SESSION['question'] = $que;

Make sure that you have a session going first, placing this at the top of your script will start a session if one doesn't already exist:

if( !isset( $_SESSION ) ) {
    session_start();
}

To pull it back up:

$array = $_SESSION['question'];  //Assigns session var to $array
print_r($array);                 //Prints array - Cannot use echo with arrays


Final Addition

To iterate over the array, you can typically use for, or foreach. For statements really only work well when your array keys are incremental (0, 1, 2, 3, etc) without any gaps.

for( $x = 0, $max = count($array); $x < $max; ++$x ) {
    echo $array[$x];
}

foreach( $array as &$value ) {
    echo $value;
}

Both have been written in mind for performance. Very important to know that when using a reference (&$value, notice the &) that if you edit the reference, the original value changes. When you do not use by reference, it creates a copy of the value. So for example:

//Sample Array
$array = array( '0' => 5, '1' => 10 );


//By Reference
foreach( $array as &$value ) {
    $value += 2;               //Add 2 to each value
    echo $value;               //Echos 7 and 12, respectively
}
print_r( $array );  //Now equals array( '0' => 7, '1' => 12 )


//Normal Method
foreach( $array as $value ) {
    $value += 2;               //Add 2 to each value
    echo $value;               //Echos 7 and 12, respectively            
}
print_r( $array );  //Still equals array( '0' => 5, '1' => 10 )

References are faster, but not if you are planing on modifying the values while keeping the original array intact.

Upvotes: 6

Related Questions