先看如下代码 ://获得数组
<?php if(isset($_COOKIE['id'])){
$record_str=$_COOKIE['id'];
$record=unserialize($record_str);
}
else $record=array();
?>
//获得当前ID
<?php if(isset($_GET['id'])){
$id=$_GET['id'];
$record=array_push($record,$id);
$record_str=serialize($record);
setcookie('id',$record_str);
}?>
//输出链接与数组
<?php for($i=1;$i<10;$i++){
echo "<a href='array_test.php?id=$i'>$i</a>"."</br>";
}?>
    <?php print_r($record);?>运行结果为:
Warning: array_push() [function.array-push]: First argument should be an array in F:\PHPnow\htdocs\tv\array_test.php on line 17
1
2
3
4
5
6
7
8
9
当把第一个获得数组函数的IF语句去掉,直接换成$record=array()时运行正常,也就是说unserialize出来的“数组”并不是数组,这是什么原因呢?如何正常从COOKIE中取得数组?

解决方案 »

  1.   

     $record=array_push($record,$id); 这句是什么东东?array_push左边不用赋值啦
      

  2.   

    unserialize — 从已存储的表示中创建 PHP 的值 
      在第一个if条件中,你的$record_str是经过serialize序列化的字符串吗?
     在$record_str=$_COOKIE['id'];下面echo $record_str;看是什么值?
      

  3.   

    $record_str是从下面这个函数里来的  <?php if(isset($_GET['id'])){
        $id=$_GET['id'];
        $record=array_push($record,$id);
        $record_str=serialize($record);
        setcookie('id',$record_str);
        }?>
      

  4.   

    去掉array_push()左边之后还是一样的提示,,
      

  5.   

    $record_str=$_COOKIE['id'];
    改为 
    $record_str = stripcslashes($_COOKIE['id']);$record=array_push($record,$id);
    改为 
    array_push($record,$id);
      

  6.   

    问题解决了,存进COOKIE的数组多出“\”,使用stripcslashes函数处理后正常了。