php array_merge不适用于cookies id

时间:2012-06-20 12:19:45

标签: php cookies shopping-cart array-merge

我有一个php merge_array的问题,我正在写一个从html表单中的按钮获取元素id的cookie,然后我创建一个cookie setcookie(" info",$ _REQUEST [&#34 ; ELEMENT_ID"] + 1,时间()+ 3600)。我想编写一个数组,将$ array1与表单中的ellement id和$ array2合并,以获取cookie元素。问题当我点击我页面上的购买按钮时,我总是在阵列上有2个元素,新元素和一个来自cookies数组。 数组([0] => [1] =>数组([info] => 16  我希望获得不仅仅有2个元素的数组$结果,这样我就可以使用id将名称,照片和其他属性放入购物车中

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?
$array1=array($_REQUEST["ELEMENT_ID"]);

if(!isset($_COOKIE["info"])){
    setcookie("info", $_REQUEST["ELEMENT_ID"]+1, time()+3600);
    $w = $_REQUEST["ELEMENT_ID"]+1;
    print_r($_COOKIE);
}
echo"<br/>";
$array2=array($_COOKIE);
$result= array_merge($array1, $array2);
print_r($result);

&GT;

1 个答案:

答案 0 :(得分:0)

编辑:

好了,我现在更好地了解你想做什么,这就是我的建议。由于您希望将历史数据存储在cookie中,并且希望将其保存在数组中,因此您可以将数据存储为cookie中的序列化ID数组。你现在做的是获取当前的ELEMENT_ID,向其中添加一个,并将该值存储到cookie中,该cookie将覆盖已存在的值。所以我会用这个替换你的所有代码:

<?php
    // do your checks
    if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

    // 1: if cookie exists, grab the data out of it
    $historical_element_ids = array(); // initialize the variable as an array
    if(isset($_COOKIE['info'])){
        // retrieve the previous element ids as an array
        $historical_element_ids = unserialize($_COOKIE['info']);
    }

    // 2: add the new id to the list of ids (only if the id doesn't already exist)
    // the cookie will remain unchanged if the item already exists in the array of ids
    if(!in_array($_REQUEST['ELEMENT_ID'], $historical_element_ids)){
        $historical_element_ids[] = $_REQUEST['ELEMENT_ID']; // adds this to the end of the array

        // 3: set the cookie with the new serialized array of ids
        setcookie("info", serialize($historical_element_ids), time()+3600);
    }

    // display the cookie (should see a serialized array of ids)
    print_r($_COOKIE);
    echo"<br/>";

    // accessing the cookie's values
    $result = unserialize($_COOKIE['info']);
    print_r($result);
?>