За последние 24 часа нас посетили 22422 программиста и 1028 роботов. Сейчас ищут 766 программистов ...

Исключить из массива если значение равно нулю.

Тема в разделе "PHP для новичков", создана пользователем Искандар, 17 янв 2020.

  1. Искандар

    Искандар Активный пользователь

    С нами с:
    18 фев 2017
    Сообщения:
    76
    Симпатии:
    6
    Всем доброго времени суток!
    Есть такой код:
    PHP:
    1. if(isset($_POST['submit2'])){
    2. if(!empty($_POST["kolvo2"])){
    3. $out = array();
    4. for($i = 0; $i < count($_POST["kolvo2"]); $i++){
    5. if($_POST["kolvo2"][$i]!=""){
    6. $kolvo2 = @$_POST["kolvo2"][$i];
    7. $roditel = @$_POST["roditel"][$i];
    8. $ruz = $_POST["ruz"];
    9. $tip = $_POST["tip"];
    10. $out[] = "('".$kolvo2."', '".$roditel."', '".$ruz."', '".$tip."')";
    11. }}
    12. if(!empty($out)){
    13. $query = "INSERT INTO `sklad` (`kolvo`, `roditel`, `ruz`, `tip`) VALUES ".implode(",", $out);
    14. //$res = mysqli_query($db, $query);
    15. //echo mysqli_error();
    16. var_dump($query);
    17. }}}
    Вот результат:
    string(1064) "INSERT INTO `sklad` (`kolvo`, `roditel`, `ruz`, `tip`) VALUES
    ('0', 'СП 8008', '2020-01-17', 'Приход'),
    ('0', 'СП 8008', '2020-01-17', 'Приход'),
    ('0', 'СП 8008', '2020-01-17', 'Приход'),
    ('0', 'СП 8008', '2020-01-17', 'Приход'),
    ('0', 'СП 0220', '2020-01-17', 'Приход'),
    ('0', 'СП 0220', '2020-01-17', 'Приход'),
    ('0', 'СП 0220', '2020-01-17', 'Приход'),
    ('0', 'СП 0220', '2020-01-17', 'Приход'),
    ('0', 'СП 0220', '2020-01-17', 'Приход'),
    ('0', 'СП 09', '2020-01-17', 'Приход'),
    ('0', 'СП 09', '2020-01-17', 'Приход'),
    ('0', 'СП 09', '2020-01-17', 'Приход'),
    ('0', 'СП 09', '2020-01-17', 'Приход'),
    ('0', 'СП 15', '2020-01-17', 'Приход'),
    ('0', 'СП 15', '2020-01-17', 'Приход'),
    ('0', 'СП 15', '2020-01-17', 'Приход'),
    ('0', 'СП 15', '2020-01-17', 'Приход'),
    ('0', 'Сп 5005', '2020-01-17', 'Приход'),
    ('0', 'Сп 5005', '2020-01-17', 'Приход'),
    ('0', 'Сп 5005', '2020-01-17', 'Приход'),
    ('0', 'Сп 5005', '2020-01-17', 'Приход')"
    Вопрос: Как мне исключить строки которые "$kolvo2" = 0 (не хочу сервер по просту загрузить...).
    Спасибо!
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.319
    Адрес:
    Лень
    условие создай и проверяй значение переменной
    --- Добавлено ---
    PHP:
    1. array_diff ( $_POST["kolvo2"], [ null ] )
    тестируй
     
  3. Искандар

    Искандар Активный пользователь

    С нами с:
    18 фев 2017
    Сообщения:
    76
    Симпатии:
    6
    Можно примерчик?)
    Я, если честно не понял как и где условия создать(.
    Вот что я попробовал:
    PHP:
    1. $a = array_diff($_POST["kolvo2"],[null]);
    2. if ($a >0){
    3. ...
    4. }
    Нечего не получилось.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
  5. Vinikon

    Vinikon Активный пользователь

    С нами с:
    9 ноя 2016
    Сообщения:
    10
    Симпатии:
    1
    а почему нельзя сделать так (переписываем 10 строку):
    Код (Text):
    1. if (intval($kolvo2) > 0) {
    2. $out[] = "('".intval($kolvo2)."', '".$roditel."', '".$ruz."', '".$tip."')";
    3. }
     
    Искандар нравится это.
  6. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Код конечно жесть! Может логику стоит пересмотреть? И тогда и код станет короче и все эти трудности уйдут.

    Вот даже начало кода, почему нельзя написать вот так?
    PHP:
    1. if(isset($_POST['submit2']) && !empty($_POST["kolvo2"])){
    2.  
    3.     # code...
    4. }
    Если тебе не нужны те значения в которых $kolvo2 = 0 можно сделать и так:
    PHP:
    1. if($kolvo2 == 0) continue;
    PS: еще интересно примеры того, что там в POST приходит.
     
    #6 AlexandrS, 17 янв 2020
    Последнее редактирование: 17 янв 2020
    artoodetoo нравится это.
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.319
    Адрес:
    Лень
    Мне надо за тебя создать тестовый скрипт ?
    создать POST имитацию данных в массиве ?
    почитать в документации ЧТО ЗА ФУНКЦИЯ array_diff ?
    не нужна эта функция
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    Я ответил не раскрывая спойлеры, ибо array_filter это буквально что просят в заголовке.

    Но конечно логичнее не добавлять нули сразу, чем добавлять, а потом избавляться.
     
  9. Искандар

    Искандар Активный пользователь

    С нами с:
    18 фев 2017
    Сообщения:
    76
    Симпатии:
    6
    Доброе утро1
    Спасибо за ваш ответ! Выбрал ваш вариант.
    И всем остальным спасибо за участие!