Как взорвать файл cookie и поместить результат в многомерный массив - PullRequest
1 голос
/ 25 мая 2019

Я новичок в программировании, поэтому, пожалуйста, будьте добры :) 1001 *

Работая на онлайн-рынке, где люди могут загружать объекты недвижимости, которые продаются или сдаются в аренду, я хочу создать список избранного с помощью файлов cookie. Мне уже удалось сохранить offer_id и offer_type в куки, используя

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 

У кого-нибудь есть идеи, почему? Я был бы очень благодарен за любую помощь!

1 Ответ

1 голос
/ 25 мая 2019

Потому что вы сначала говорите:

$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

На самом деле, вам следует сохранить это как сериализованный массив значений вместо нескольких файлов cookie. Или сохраните список в базе данных и сохраните в cookie только уникальный идентификатор.

...