Вставка в массив нового элемента

Poster

Новичок
Вставка в массив нового элемента

Мужики, вот так вставляю в массив новые данные о городах:

PHP:
if ($_SERVER['REQUEST_METHOD']=="GET" & isset($_GET['city']) & !empty($_GET['city'])) { // add cyty id to session
/* 30 */   if ( !in_array($_GET['city'], $_SESSION['city_id']) ) {
			$_SESSION['city_id'][] = $_GET['city'];
		}
	header("Location: ".$_SERVER['PHP_SELF']);
	exit();
}
echo '<pre>';
print_r($_SESSION);
echo '</pre>';
Вот. И при первой вставке в массив получаю по голове:
Notice: Undefined index: city_id on line 30

Warning: in_array(): Wrong datatype for second argument on line 30

Получается что я проверяю наличие в пустом массиве?

Как лучше сделать?
 

IntenT

SkyDiver
Poster
проверить вначале, есть ли в массиве элемент с ключом 'city_id'
 

Нечто

Психолог РНРClub
В данном случае isset($_GET['city']) не требуется, так как его функцию выполняет !empty($_GET['city']).
 

IntenT

SkyDiver
Нечто
Как видно, нотис генерируется совсем другим обращением
 

Poster

Новичок
Нечто, да, возможно.

Но не в том дело. Смотри: print_r($_SESSION);
Array
(

[city_id] => Array
(
[0] => 5
[1] => 1
[2] => 4
)

)

Проверка: Если в массиве $_SESSION['city_id'] НЕТ $_GET['city'], то вставить $_GET['city'].

При первой вставке ругается, после нее все нормально

Или я не там ищу?
 

wizard

Новичок
при первой вставке(и проверке) переменная не инициализирована
 

Quidle

Полноценный новичок
А ты при первой вставке сделай проверку
is_array ($_SESSION['city_id'])
 

Poster

Новичок
Автор оригинала: Нечто
PHP:
isset($_SESSION['city_id']) && !in_array($_GET['city'], $_SESSION['city_id'])
Нечто, а скажи мне - если $_SESSION['city_id'] не определена ранее - то как же выполнится это условие?

или я совсем туплю? не выполняется оно до того как будет вставлен хоть один элемент массива руками
 

wizard

Новичок
hint: чтобы создать массив не обязательно вставлять в него элементы
 

Нечто

Психолог РНРClub
Poster
Ну да. Сорри. Там нужно другое условие.
PHP:
if(!isset($_SESSION['city_id']) || !in_array($_GET['city'], $_SESSION['city_id']) ) {
            $_SESSION['city_id'][] = $_GET['city'];
}
 

Poster

Новичок
Спасибо за подсказки всем.
Обошелся так:
PHP:
if (!isset($_SESSION['city_id'])) $_SESSION['city_id'] = array();
По-моему, правильно )
 
Сверху