Вызов функций
$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);
}
}
По какой-то причине он продолжает добавлять к массиву, я не знаю, что я делаю неправильно.
заранее спасибо
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);
}
}
Каждый раз при вызове функции он будет хранить новые значения в $ _SESSION ['messages'] [] один за другим, если вы не хотите добавлять значения, тогда вам нужно очистить (пустой) массив до вставки нового значения. public function setError ($ title, $ msg, $ type) {$ _SESSION ['messages'] = array(); , , }
array_search($title, $_SESSION['messages']);
toarray_search($title, array_column($_SESSION['messages'], 'title'));