2015-11-07 4 views
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 ($ название, $ _SESSION [ 'сообщений']);' на 'array_search ($ название, array_column ($ _ SESSION [ 'сообщения'] , 'title')); ' –

ответ

0

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

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); 
     } 
} 
Смежные вопросы