Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
ed91
0 / 0 / 0
Регистрация: 28.12.2016
Сообщений: 10
#1

Не использовать пустые массивы

28.12.2016, 02:16. Просмотров 444. Ответов 9
Метки нет (Все метки)

Начну с самого начала.
На сайте есть форма, в ней чекбоксами можно выбрать некоторые наименования трех разнsх категорий (чекбоксов в категории много).

name="tv[]"
name="phone[]"
name="pc[]"

Форма отправляет ГЕТ запросом на сервер три массива $_GET['name'] c выбранными чекбоксами.

Далее я заношу эти массивы в переменные

PHP
1
2
3
$tv = $_GET['tv'];
$phone= $_GET['phone'];
$pc= $_GET['pc'];
и с помощью array_merge($tv, $phone, $pc); объеденяю все в один массив. Потом этот массив парщю и вывожу все значения с него.

Проблема заключается в том, что если человек ничего не выберет в чекбоксах с именем phone, то на сервер придет пустой массив $_GET['phone']. А это означает что array_merge перестает работать, так как с пустой переменной оно не работает.

Мне нужно как-то сделать так, чтобы в array_merge попадали только те переменные, которые массивы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2016, 02:16
Ответы с готовыми решениями:

Использовать или не использовать шаблонизатор smarty?
Всем доброго времени суток. Возник такой вопрос на тему шаблонизатора smarty. В...

Возьмите фрагменты кода и поместите их на пустые строчки. Каждый фрагмент можно использовать один раз
Возьмите фрагменты кода и поместите их на пустые строчки. Каждый фрагмент можно...

Дисковод не читает пустые dvd-r/rw и пустые cd-rw диски.
Дисковод не читает пустые dvd r/rw и пустые cd rw диски. Прибор для чтения -...

Массивы не использовать.....
Подсчитать количество цифр в десятичной записи целого неотрицательного числа n....

Как использовать динамические массивы?
При создании массива количество элементов приписывается заранее. Что делать,...

9
BearBaloo
41 / 41 / 16
Регистрация: 04.10.2016
Сообщений: 154
Завершенные тесты: 1
28.12.2016, 02:53 #2
я могу ошибаться но можно вроде так написать
PHP
1
 $tv = $_GET['tv'] || []
ну и точно работающая конструкция

PHP
1
$tv = isset($_GET['tv']) ? $_GET['tv'] : [];
0
sad67man
688 / 563 / 342
Регистрация: 23.08.2015
Сообщений: 1,398
28.12.2016, 02:54 #3
ed91, Ну к примеру так
PHP
1
2
3
4
5
$tv = is_array($_GET['tv'])? $_GET['tv'] : array();
$phone = is_array($_GET['phone'])? $_GET['phone'] : array();
$tv = is_array($_GET['pc'])? $_GET['pc'] : array();
 
$arr = array_merge($tv, $phone, $pc);
0
Sombrero
73 / 69 / 40
Регистрация: 31.03.2014
Сообщений: 298
28.12.2016, 03:04 #4
ed91,
1 вариант
PHP
1
2
3
4
$arr = [];
foreach ($_GET as $get){
       $arr = array_merge($get,$arr);
}
2 вариант
PHP
1
2
3
$tv =   !empty($_GET['tv']) ?: [];
$phone= !empty($_GET['phone']) ?: [];
$pc=    !empty($_GET['pc']) ?: [];
Смотря что именно нужно
0
sad67man
688 / 563 / 342
Регистрация: 23.08.2015
Сообщений: 1,398
28.12.2016, 03:11 #5
Sombrero, Думаю, что нужно сделать так, чтоб не возникало ошибок, при вызове array_merge. Это будет только в том случае, если все аргументы будут являться массивами. Метод GET, через адресную строку я могу передать любое значение, все-таки проверка !empty() является недостаточной.
0
ed91
0 / 0 / 0
Регистрация: 28.12.2016
Сообщений: 10
28.12.2016, 03:19  [ТС] #6
Спасибо. Вроде как нормально теперь работает.

Еще есть вопрос не совсем по теме. Можно ли в пхп сверять число и интервал? Допустим у меня лежит в переменной $q = 50-200. Это строка. В переменной $x = 148
Мне по сути надо написать простое условие: "Если $x входит в интервал $q,то..."
0
sad67man
688 / 563 / 342
Регистрация: 23.08.2015
Сообщений: 1,398
28.12.2016, 03:39 #7
ed91,
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function isInInterval($int, $strInterval) {
    preg_match_all('/(\d+)-(\d+)/', $strInterval, $match);
    $num1 = (int)$match[1][0];
    $num2 = (int)$match[2][0];
    return ($int>$num1 && $int<$num2) || ($int>$num2 && $int<$num1);
}
 
$interval ='50-200';
$x = 126;
 
if(isInInterval($x, $interval)) {
    echo $x." входит в интервал " . $interval;
} else {
    echo $x." не входит в интервал " . $interval;
}
0
Sombrero
73 / 69 / 40
Регистрация: 31.03.2014
Сообщений: 298
28.12.2016, 03:46 #8
sad67man, ну раз твой пример с is_array исключает любую ошибку, тогда вопросов нет, ты прав)
0
ed91
0 / 0 / 0
Регистрация: 28.12.2016
Сообщений: 10
28.12.2016, 04:11  [ТС] #9
sad67man, спасибо
Я вот сделал это таким "обезьянячим" способом:

PHP
1
2
3
4
5
6
$str = "50-200";
$str2 = 148;
$arr = explode("-", $str);
if( $str2 > $arr[0] && $str2  < $arr[1]){
echo "входит в интервал";
}
но ваш код выглядит солиднее)
0
sad67man
688 / 563 / 342
Регистрация: 23.08.2015
Сообщений: 1,398
28.12.2016, 04:16 #10
ed91, Ваш код лучше) Не знаю, чего меня дернуло это делать через регулярку. Спать уже пора)
0
28.12.2016, 04:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2016, 04:16

Задать элементы списка. Не использовать массивы
Помогите задать элементы списка. Не использовать массивы. Тип элементов...

Вывести n целых чисел (массивы не использовать)
Вывести n целых чисел (массивы не использовать). Вычислить и вывести а)...

Умножить матрицу на вектор. Использовать массивы
Написать подпрограмму функцию или процедуру, осуществляющую заданные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru