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

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

28.12.2016, 02:16. Просмотров 370. Ответов 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 попадали только те переменные, которые массивы.
http://www.cyberforum.ru/php-beginners/thread1136261.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2016, 02:16
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не использовать пустые массивы (PHP):

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

Дисковод не читает пустые 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
664 / 542 / 334
Регистрация: 23.08.2015
Сообщений: 1,325
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
664 / 542 / 334
Регистрация: 23.08.2015
Сообщений: 1,325
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
664 / 542 / 334
Регистрация: 23.08.2015
Сообщений: 1,325
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
664 / 542 / 334
Регистрация: 23.08.2015
Сообщений: 1,325
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 целых чисел (массивы не использовать). Вычислить и вывести а)...

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

Можно ли в ASP использовать динамические массивы
У меня что-то браузер ругается на них... Приходится объявлять массивы с...

Сортировка слиянием - использовать динамические массивы
Добрый день. Хотел бы спросить. На просторах сети нашел код сортировки массива...


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

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

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