【问题标题】:How to explode a cookie and put result in a multidimensional-array如何分解 cookie 并将结果放入多维数组
【发布时间】:2019-10-11 21:24:58
【问题描述】:

我是编码新手,所以请善待:)

在人们可以上传待售或出租房地产的在线市场上工作,我想用 cookie 建立一个收藏列表。我已经设法将 offer_id 和 offer_type 存储在 cookie 中,使用

setcookie("$flat_rent_id", $flat_rent_id . "__" . "$offering_type", time() + (86400 * 30), '/');

并使用

构造一个数组explodedCookiesArray
// Construct array of exploded cookies
$h = -1;
$i = -1;
foreach($_COOKIE as $COOKIE => $value) {
    $h++;
    $i = -1;
    $explode = (explode("__", $value, 2));
    foreach ( $explode as $item ) {
        $i++;
        $explodedCookiesArray[$h][$i] = $item . " " ;
    }
}

当我使用打印数组时

// Print the constructed array "explodedCookiesArray
echo "explodedCookiesArray";
for ($i=0; $i <= count($_COOKIE); $i++){
    echo "<br>";

    for ($j=0; $j <= count($_COOKIE); $j++){
        echo $explodedCookiesArray[$i][$j];

    }
}
echo "<br>";

我得到了输出

explodedCookiesArray
378b94ed20765e354ec9790832800ed6 
Offering5ce890ed7f11d house_rent
Offering5ce8935b812f6 house_sale
Offering5ce8f86bbda11 flat_sale
Offering5ce93dfdcae32 house_rent
Offering5ce9411388315 flat_rent

如果我使用

print_r($explodedCookiesArray);

我得到了输出:

Array ( 
[0] => Array ( [0] => 378b94ed20765e354ec9790832800ed6 ) 
[1] => Array ( [0] => Offering5ce890ed7f11d [1] => house_rent ) 
[2] => Array ( [0] => Offering5ce8935b812f6 [1] => house_sale ) 
[3] => Array ( [0] => Offering5ce8f86bbda11 [1] => flat_sale ) 
[4] => Array ( [0] => Offering5ce93dfdcae32 [1] => house_rent )
[5] => Array ( [0] => Offering5ce9411388315 [1] => flat_rent ) ) 

命令

if (isset($explodedCookiesArray[1][1])) {
    echo $explodedCookiesArray[1][1] . "<br>";

    if ($explodedCookiesArray[1][1] == "house_rent") {
        echo "Hello";
    } else {
        echo "Goodbye";
    }
}

输出以下内容:

house_rent
Goodbye 

有人知道为什么吗? 我会非常感谢您提供的各种帮助!

【问题讨论】:

  • 尝试使用 print_r($explodedCookiesArray) 查看数组内容。
  • @Dammeul 刚刚尝试将输出添加到问题文本中,谢谢。你能再看看吗?我仍然没有看到错误...
  • 多么奇怪..从外观上看应该可以工作...我在这里尝试过,得到相同的输出,它正在工作3v4l.org/ktJN3...
  • 你在哪里做 IF?有什么可以改变代码中的值吗?

标签: php arrays cookies multidimensional-array explode


【解决方案1】:

因为你先说:

$explodedCookiesArray[$h][$i] = $item . " " ;

然后你说:

if ($explodedCookiesArray[1][1] == "house_rent")

比较中没有空格字符。


这段代码比它需要的要冗长得多。如果我正确理解了您的数据,那么您只需要 foreach 循环中的一行即可:

// test data
$_COOKIE = [
    "PHPSESSID"             => "378b94ed20765e354ec9790832800ed6",
    "Offering5ce890ed7f11d" => "Offering5ce890ed7f11d__house_rent",
    "Offering5ce8935b812f6" => "Offering5ce8935b812f6__house_sale",
    "Offering5ce8f86bbda11" => "Offering5ce8f86bbda11__flat_sale",
];

$explodedCookiesArray = [];
foreach ($_COOKIE as $c) {
    $explodedCookiesArray[] = explode("__", $c);
}

if ($explodedCookiesArray[1][1] == "house_rent") {
    echo "Hello";
} else {
    echo "Goodbye";
}

输出:

Hello

确实,您应该将其存储为 serialized 值数组,而不是多个 cookie。或者将列表存储在数据库中,并在 cookie 中仅保留唯一标识符。

【讨论】:

  • 就是这样!感谢您帮助我找到错误以及有关代码结构的提示。
猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 2012-12-26
  • 1970-01-01
  • 2020-07-25
  • 2018-12-03
  • 2021-03-06
  • 1970-01-01
  • 2012-07-01
相关资源
最近更新 更多