Есть ли пустые элементы в массиве?

03.07.2010

Дописываю API для каталога Daos, и надо было проверить, все ли переданные параметры содержат данные. Уже начал свою функцию городить, но потом решил просмотреть список встроенных PHP-функций и убедился, что всё уже давно придумано.

Оказывается, если в качестве поискового аргумента функции array_search указать пустое значение, она и будет искать пустые элементы. Соответственно, вернёт false, если пустых элементов в этом массиве нет. По-моему, красиво. Я не был уверен, что поиск пустоты сработает.

$PROFIT = array_search('', $_REQUEST);

Комментарии

  1. # tulvit

    Действительно, красивое решение.

    PS
    Перешел по ссылке и понял, что надо чаще и больше читать документацию. Я и не думал, что функций для работы с массивами столько. Для себя сразу выделил shuffle для перемешки, а ведь пришлось бы делать свою, скорее всего кривую, реализацию. И еще приятно удивлен наличием русского языка в документации, чаще всего приходилось читать документацию на английском на этом же сайте, так как ищу в основном запросом в поисковиках «php название функции», выдается в большинстве случаев ссылка на англ версию доков.

  2. # Тормоз

    На самом деле «родных» функций очень и очень много, практически к любому случаю. Например, мало кто из PHPшников использует filter_var, а это охренительная штука.

    А про русский язык в доках посмотри тут, будешь ещё более приятно удивлён. Пользуйся :)

  3. # tulvit

    А про русский язык в доках посмотри тут, будешь ещё более приятно удивлён.

    Чьерт. И ведь читал ведь тот пост, однако сразу забыл, видимо читал в предсонном состоянии(
    Но представленный там способ поиска через браузер как-то не особо нравится, удобней ведь гуглом site:http://docs.php.net/manual/ru/, индексируется нормально(в Яндексе в том числе).

    Например, мало кто из PHPшников использует filter_var, а это охренительная штука.

    Да, «вкусняшек» в php куча. Кстати, пользуясь случаем спрошу, что ты думаешь о библиотеке классов pear?

  4. # Тормоз

    Чем удобней? Через Google делается два запроса как минимум, а через браузер страница открывается сразу.

    PEAR изучал маленько, но ничем не пользуюсь. Как-то замудрёно там вс

  5. # tulvit

    На вскидку, можно гуглить не только по названиям функций, но и по их русскому описанию. А так, конечно, дело вкуса и потребностей. Если необходимость возникает крайне редко, то гуглить, если с завидно регулярностью, то через браузер.

    По поводу pear-а спросил, т.к. как-то давно общался с вроде как мега программистом (не видел его прог, но из достоверных источников знал, что его разработки рассматриваются во всяких высоких научных инстанциях). Так он вовсю проповедовал этот pear, я его еще тогда погуглил, но ничего не понял, кроме как что это библиотека классов. И вот с тех пор с периодичностью в месяц-два-три приходит в голову мысль «ООП это сила, а с библиотеками классов так вообще мега вещь, надо учить, надо», но дальше размышлений дело так ни разу и не продвинулось. Вот спросил, надеялся на мотивационный пинок так сказать=)

  6. # quantum

    Просто для проверки лучше использовать in_array(’‘,$x)

  7. # quantum

    А в текущем варианте не все отловится:

    $x=array(’‘,1);
    var_dump(array_search(’‘, $x));

    Вторая строка вернет 0, что воспримется в конструкции if(array_search(’‘, $x)) как ложь.

    Нужно использовать так: if(array_search(’‘, $x)===false), так что проще in_array

  8. # Тормоз

    Tulvit, зачем тебе пинки? Чувствуешь, что дело стоящее — изучай :) У PEAR, например, прикольно продумана установка расширений. Ну и вообще, как я понимаю, там на любой случай почти есть решения. Однако, я минималист, а грушные библиотеки часто очень избыточные.

    Quantum, да, in_array получше, наверно. Однако, у меня массив ассоциативный, поэтому пофиг — проблем всё равно не будет.

  9. # Ewg: 

    filter_input_array (http://php.net/manual/en/function.filter-input-array.php) – решае проблему появления сферической задачи.
    P.S. давно не посещал сёрч. Как там? Школолота обежае?

  10. # Тормоз

    Причем здесь Сёрч? :) Да и не вижу, чем filter_input_array лучше.

  11. # kip

    Хм, почему многие не любят самых простых решений?

    foreach($array as $id => $value) { if(!$value==»«) { //Bla bla } }

  12. # Тормоз

    kip, фу, бяка.

  13. # chubaka: 

    Функция empty также проверяет пустой ли массив.

    $arr = array();
    if (empty($arr))
    {
    echo ‘test’;
    }

  14. # Тормоз

    Chubaka, мне не нужно было узнать, пустой ли массив. Задача другая: выяснить, есть ли в массиве пустые элементы (хотя бы один).

  15. # chubaka: 

    Окей, получай такое решение.

    $array = array(«lastname», «», «phone»);
    $tmp = implode(»,», $array);
    if (strstr($tmp, «,,»)
    {
    echo ‘есть пустой элемент’;
    }

  16. # Тормоз

    Спасибо! Шесть строчек и четыре функции конечно, лучше, чем одна :)

  17. # Ewg: 

    Уважаемый говнокодер (chubaka), Ваш код, действительно, говнокод. Пруф:
    <?php $array = array(’‘, ‘lastname’, ‘phone’);
    $tmp = implode(’,’, $array);
    if (strstr($tmp, ‘,,’))
    {
    echo ‘есть пустой элемент’;
    }

    Предложите добавить проверку !== null или is_int?
    Суть не меняется.

  18. # chubaka: 

    Уважаемые Тормоз – вы не правы. Уважаемый 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

  19. # chubaka: 

    Ewg: Да, мой код при вашем примере он не сработает. А я и не говорил что мой вариант лучший, просто предложил еще один, без поиска по всему массиву, а перевести его в текст. Что очевидно намного быстрее.

  20. # Тормоз

    Скорость выполнения скрипта не всегда имеет решающее значение. В моём случае вообще не имеет, ± доли секунды никакой роли не играют.

  21. # chubaka: 

    Тормоз согласен.
    Просто вариант kip‘а вы откинули как говно, хотя его вариант идентичен оригинальной функции.

  22. # Тормоз

    Ко мне на «ты» лучше. Вариант Kip`а банален, зачем циклы везде сувать, когда есть специальная функция? Это элементарно удобнее.

  23. # quantum

    chubaka, а ты не задумывался как работает implode? :)

    >Или привыкли пользоваться чужими разработками не понимая как они работают
    Это стандартные php-функции. Нужно пользоваться ими, а не писать каждый раз свой велосипед.

  24. # Олег

    quantum, php поддерживается силами большого сообщества программистов, вступить в которое может кто угодно. Безусловно, нужно пользоваться тем, что есть, а не изобретать велосипеды, но в ситуации с php, в узких местах, иногда велосипед поедет лучше, чем то, что коммитнул какой-нибудь индус. Я считаю, что, в целом, идея chubaka верна, другое дело, что, как Тормоз отметил выше – в его ситуации время выполнения было не важно. А реализацию всегда можно бенчмаркнуть и сравнить результаты ;) .

  25. # quantum

    1. В подавляющем большинстве случаев необходимо пользоваться стандартными функциями.
    2. Каждый коммит индуса пройдет проверку на индусский код, прежде чем войдет в итоговую версию.
    3. В приложениях так критичных ко времени исполнения, что не устраивают стандартные функции php, не нужно использовать php.
    4. Говнокод есть говнокод

  26. # Олег

    quantum согласен по всем, кроме, наверно 3-го пункта)) – если есть только лишь возможность использовать php – начинаются гонки по вертикали с производительностью. И тут можно столкнуться с падением производительности как при выполнении отдельной функции,так и в определенных участках кода при обработке больших объемов данных. Но это, конечно, все лирика :) – мы тут дискутируем-дискутируем, а Тормоз тем временем пишет нужные вещи :D

Комментирование этой статьи закрыто.

Интересное Покупки ТехникаРазное Отдых Статьи Строительство Услуги Общество Хобби Культура Советы Уют