Альтернатива in_array для проверки в PHP

1

Я использую in_array() для проверки того, является ли значение product_id в массиве, но оно, похоже, не работает.

Вот как я добавляю новый product_id с дополнительной информацией внутри моей переменной сеанса:

$_SESSION['product_list']['premium'][$product_id] = array(                                                         
    "price" => $price,                                                        
    "name" => $name
);

И это мой код для проверки, добавлен ли он в сеанс или нет (чтобы предотвратить дублирование одного и того же продукта)

$array_to_check = $_SESSION['product_list']['premium'];

if ( in_array($product_id, $array_to_check) ) {

    echo json_encode( 'already exists' );

} else {

    echo json_encode( 'successfully added' );

}

Но меня всегда "успешно добавили", хотя я пытаюсь добавить один и тот же продукт снова и снова.

Что не так с этим кодом?

  • 0
    in_array проверяет значение в массиве. То, что вы делаете, проверяет key . Используйте array_key_exists .
Теги:
arrays

4 ответа

2
Лучший ответ

Вы должны использовать array_key_exists -

array_key_exists($product_id, $array_to_check)

$product_id является ключом к этой глубине. in_array проверяет значения.

1

Я думаю, вы хотите проверить ключ в наборе помощников, для этого вы должны использовать array_key_exists(), in_array() будет проверять значения, а не ключи.

Например:

$search_array = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search_array)) {
    echo "The 'first' element is in the array";
}
1

Вы можете проверить это как

if(isset($_SESSION['product_list']['premium'][$product_id]))
 {
 //yes
 }
  • 0
    Ничего себе, это, кажется, работает хорошо и тоже просто. Upvoted.
1
if(isset($_SESSION['product_list']['premium'][$product_id])) {
    echo json_encode('already exists');
} else {
    echo json_encode('successfully added');
}

если $_SESSION['product_list']['premium'][$product_id] пуст или false, это будет истинно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню