Не правильно проверить, существует ли значение в массиве?

1

Вызов функций

$user->setError("h", "h", "error");
$user->setError("h2", "h", "error");' 

функция:

public function setError($title, $msg, $type) {
        if(!isset($_SESSION['messages'])) {
            $_SESSION['messages'][] = array("title" => $title, "message" => $msg, "type" => $type);
        } else {
            $key = array_search($title, $_SESSION['messages']);
            if($_SESSION['messages'][$key]['title'] !== $title)
                $_SESSION['messages'][] = array("title" => $title, "message" => $msg, "type" => $type);
        }
    }

По какой-то причине он продолжает добавлять к массиву, я не знаю, что я делаю неправильно.

заранее спасибо

  • 0
    изменить array_search($title, $_SESSION['messages']); to array_search($title, array_column($_SESSION['messages'], 'title'));
Теги:
multidimensional-array

2 ответа

0

array_search работает с одномерным массивом, чтобы заставить его работать с многомерным массивом, вам нужно использовать array_column в функции array_search. array_colum будет иметь два массива параметров и имя столбца, которые вы хотите найти. В вашем случае код будет выглядеть следующим образом:

public function setError($title, $msg, $type) {
   if(!isset($_SESSION['messages'])) {
        $_SESSION['messages'][] = array("title" => $title, "message" => $msg, "type" => $type);
   } else {
        $key = array_search($title, array_column($_SESSION['messages'], 'title'));
        if($_SESSION['messages'][$key]['title'] !== $title)
            $_SESSION['messages'][] = array("title" => $title, "message" => $msg, "type" => $type);
        }
}
0

Каждый раз при вызове функции он будет хранить новые значения в $ _SESSION ['messages'] [] один за другим, если вы не хотите добавлять значения, тогда вам нужно очистить (пустой) массив до вставки нового значения. public function setError ($ title, $ msg, $ type) {$ _SESSION ['messages'] = array(); , , }

Ещё вопросы

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