如何分解 cookie 并将结果放入 multidimensional-array
How to explode a cookie and put result in a multidimensional-array
我是编码新手,请多多关照:)
在人们可以上传待售或出租房地产的在线市场上工作,我想用 cookie 建立一个收藏夹列表。我已经设法使用
将 offering_id 和 offering_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
有人知道为什么吗?
非常感谢您提供的所有帮助!
因为你先说:
$explodedCookiesArray[$h][$i] = $item . " " ;
然后你说:
if ($explodedCookiesArray[1][1] == "house_rent")
比较中没有space个字符。
这段代码比它需要的要冗长得多。如果我没有正确理解你的数据,你只需要 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 中只保留一个唯一标识符。
我是编码新手,请多多关照:)
在人们可以上传待售或出租房地产的在线市场上工作,我想用 cookie 建立一个收藏夹列表。我已经设法使用
将 offering_id 和 offering_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
有人知道为什么吗? 非常感谢您提供的所有帮助!
因为你先说:
$explodedCookiesArray[$h][$i] = $item . " " ;
然后你说:
if ($explodedCookiesArray[1][1] == "house_rent")
比较中没有space个字符。
这段代码比它需要的要冗长得多。如果我没有正确理解你的数据,你只需要 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 中只保留一个唯一标识符。