Есть ли пустые элементы в массиве?
03.07.2010 технологии
Дописываю API для каталога Daos, и надо было проверить, все ли переданные параметры содержат данные. Уже начал свою функцию городить, но потом решил просмотреть список встроенных PHP-функций и убедился, что всё уже давно придумано.
Оказывается, если в качестве поискового аргумента функции array_search указать пустое значение, она и будет искать пустые элементы. Соответственно, вернёт false, если пустых элементов в этом массиве нет. По-моему, красиво. Я не был уверен, что поиск пустоты сработает.
$PROFIT = array_search('', $_REQUEST);
Комментарии
Комментирование этой статьи закрыто.
« Активные рекламные площадки Daos HTML5 наступает широким фронтом! »
Действительно, красивое решение.
PS
Перешел по ссылке и понял, что надо чаще и больше читать документацию. Я и не думал, что функций для работы с массивами столько. Для себя сразу выделил shuffle для перемешки, а ведь пришлось бы делать свою, скорее всего кривую, реализацию. И еще приятно удивлен наличием русского языка в документации, чаще всего приходилось читать документацию на английском на этом же сайте, так как ищу в основном запросом в поисковиках «php название функции», выдается в большинстве случаев ссылка на англ версию доков.
На самом деле «родных» функций очень и очень много, практически к любому случаю. Например, мало кто из PHPшников использует filter_var, а это охренительная штука.
А про русский язык в доках посмотри тут, будешь ещё более приятно удивлён. Пользуйся :)
Чьерт. И ведь читал ведь тот пост, однако сразу забыл, видимо читал в предсонном состоянии(
Но представленный там способ поиска через браузер как-то не особо нравится, удобней ведь гуглом site:http://docs.php.net/manual/ru/, индексируется нормально(в Яндексе в том числе).
Да, «вкусняшек» в php куча. Кстати, пользуясь случаем спрошу, что ты думаешь о библиотеке классов pear?
Чем удобней? Через Google делается два запроса как минимум, а через браузер страница открывается сразу.
PEAR изучал маленько, но ничем не пользуюсь. Как-то замудрёно там вс
На вскидку, можно гуглить не только по названиям функций, но и по их русскому описанию. А так, конечно, дело вкуса и потребностей. Если необходимость возникает крайне редко, то гуглить, если с завидно регулярностью, то через браузер.
По поводу pear-а спросил, т.к. как-то давно общался с вроде как мега программистом (не видел его прог, но из достоверных источников знал, что его разработки рассматриваются во всяких высоких научных инстанциях). Так он вовсю проповедовал этот pear, я его еще тогда погуглил, но ничего не понял, кроме как что это библиотека классов. И вот с тех пор с периодичностью в месяц-два-три приходит в голову мысль «ООП это сила, а с библиотеками классов так вообще мега вещь, надо учить, надо», но дальше размышлений дело так ни разу и не продвинулось. Вот спросил, надеялся на мотивационный пинок так сказать=)
Просто для проверки лучше использовать in_array(’‘,$x)
А в текущем варианте не все отловится:
$x=array(’‘,1);
var_dump(array_search(’‘, $x));
Вторая строка вернет 0, что воспримется в конструкции if(array_search(’‘, $x)) как ложь.
Нужно использовать так: if(array_search(’‘, $x)===false), так что проще in_array
Tulvit, зачем тебе пинки? Чувствуешь, что дело стоящее — изучай :) У PEAR, например, прикольно продумана установка расширений. Ну и вообще, как я понимаю, там на любой случай почти есть решения. Однако, я минималист, а грушные библиотеки часто очень избыточные.
Quantum, да, in_array получше, наверно. Однако, у меня массив ассоциативный, поэтому пофиг — проблем всё равно не будет.
filter_input_array (http://php.net/manual/en/function.filter-input-array.php) – решае проблему появления сферической задачи.
P.S. давно не посещал сёрч. Как там? Школолота обежае?
Причем здесь Сёрч? :) Да и не вижу, чем filter_input_array лучше.
Хм, почему многие не любят самых простых решений?
foreach($array as $id => $value) { if(!$value==»«) { //Bla bla } }
kip, фу, бяка.
Функция empty также проверяет пустой ли массив.
$arr = array();
if (empty($arr))
{
echo ‘test’;
}
Chubaka, мне не нужно было узнать, пустой ли массив. Задача другая: выяснить, есть ли в массиве пустые элементы (хотя бы один).
Окей, получай такое решение.
$array = array(«lastname», «», «phone»);
$tmp = implode(»,», $array);
if (strstr($tmp, «,,»)
{
echo ‘есть пустой элемент’;
}
Спасибо! Шесть строчек и четыре функции конечно, лучше, чем одна :)
Уважаемый говнокодер (chubaka), Ваш код, действительно, говнокод. Пруф:
<?php $array = array(’‘, ‘lastname’, ‘phone’);
$tmp = implode(’,’, $array);
if (strstr($tmp, ‘,,’))
{
echo ‘есть пустой элемент’;
}
Предложите добавить проверку !== null или is_int?
Суть не меняется.
Уважаемые Тормоз – вы не правы. Уважаемый Ewg – я не обзывался и не собираюсь.
Но, укажу на вашу ошибку. Вы говорите что array_search быстрее ? А вы никогда не задумывались как array_search сделан внутри ? Или привыкли пользоваться чужими разработками не понимая как они работают ? Ну так вот там исходник array_search из PEAR:
Ссылка http://google.com/codesearch/p?hl=en#S-1qOsiFCC4/vendor/pear/PHP/Compat/Function/array_search.php&q=array_search&sa=N&cd=1&ct=rc
Ewg: Да, мой код при вашем примере он не сработает. А я и не говорил что мой вариант лучший, просто предложил еще один, без поиска по всему массиву, а перевести его в текст. Что очевидно намного быстрее.
Скорость выполнения скрипта не всегда имеет решающее значение. В моём случае вообще не имеет, ± доли секунды никакой роли не играют.
Тормоз согласен.
Просто вариант kip‘а вы откинули как говно, хотя его вариант идентичен оригинальной функции.
Ко мне на «ты» лучше. Вариант Kip`а банален, зачем циклы везде сувать, когда есть специальная функция? Это элементарно удобнее.
chubaka, а ты не задумывался как работает implode? :)
>Или привыкли пользоваться чужими разработками не понимая как они работают
Это стандартные php-функции. Нужно пользоваться ими, а не писать каждый раз свой велосипед.
quantum, php поддерживается силами большого сообщества программистов, вступить в которое может кто угодно. Безусловно, нужно пользоваться тем, что есть, а не изобретать велосипеды, но в ситуации с php, в узких местах, иногда велосипед поедет лучше, чем то, что коммитнул какой-нибудь индус. Я считаю, что, в целом, идея chubaka верна, другое дело, что, как Тормоз отметил выше – в его ситуации время выполнения было не важно. А реализацию всегда можно бенчмаркнуть и сравнить результаты ;) .
1. В подавляющем большинстве случаев необходимо пользоваться стандартными функциями.
2. Каждый коммит индуса пройдет проверку на индусский код, прежде чем войдет в итоговую версию.
3. В приложениях так критичных ко времени исполнения, что не устраивают стандартные функции php, не нужно использовать php.
4. Говнокод есть говнокод
quantum согласен по всем, кроме, наверно 3-го пункта)) – если есть только лишь возможность использовать php – начинаются гонки по вертикали с производительностью. И тут можно столкнуться с падением производительности как при выполнении отдельной функции,так и в определенных участках кода при обработке больших объемов данных. Но это, конечно, все лирика :) – мы тут дискутируем-дискутируем, а Тормоз тем временем пишет нужные вещи :D