Member 13471028 Ответов: 4

Проверка пустой входной строки не работает


У меня есть массив входных данных с именем "дата" , возвращающий 11 значений, из которых только 6 задаются значениями даты. Моя цель состоит в том, чтобы убедиться, что все оставшиеся 7 пустых значений в массиве не заданы из массивов, чтобы быть переиндексированными только с установленными значениями даты.
Несмотря на мои испытания, переиндексированный массив все еще возвращает 2 пустых значения вместе с 6 установленными, давая мне массив с 8 значениями. Я пробовал strlen, empty, isset и даже проверял, являются ли значения в массиве датами без особого успеха, это все равно дает мне тот же результат. Ваша помощь в этом вопросе будет очень приветствоваться, спасибо !

Что я уже пробовал:

<?php



$date = $_GET['date'];




//To not take into account any empty date
for ($i = 0; $i < sizeof($date); $i++) {
    if ($date[$i] == '') {
        unset($date[$i]);
        
    }
    
    $date = array_values($date);
    
    
    
}


//displaying this shows 2 empty values with the 6 set values
for ($i = 0; $i < sizeof($date); $i++) {
    echo "<li>";
    echo $date[$i];
    echo "</li>";
}

?>

4 Ответов

Рейтинг:
1

Bryian Tan

Как насчет того, чтобы вставить непустую дату в другой массив и затем распечатать? Что-то вроде этого.

<?php

$date = array("11/11/2017","12/11/2017","13/11/2017","14/11/2017","15/11/2017","16/11/2017","","","","","");
$date_NoEmpty = $date;
//To not take into account any empty date
for ($i = 0; $i < sizeof($date); $i++) {
   // echo sizeof($date) . ' ' .  $i . '<br/>';
    if ($date[$i] == '') {
        unset($date_NoEmpty[$i]);
       // echo 'empty';
    }
   // echo $date[$i];
  //  $date = array_values($date);
}

//displaying this shows 2 empty values with the 6 set values
for ($i = 0; $i < sizeof($date_NoEmpty); $i++) {
    echo "<li>";
    echo $date_NoEmpty[$i];
    echo "</li>";
}

?>

Выход:
11/11/2017
12/11/2017
13/11/2017
14/11/2017
15/11/2017
16/11/2017


Member 13471028

Спасибо, ваш ответ внес большой вклад в решение, которое я нашел !

Рейтинг:
1

Member 13471028

<?php
$date = $_GET['date'];
$check = $date;

// Check helps us to get the real non empty dates

for ($i = 0; $i < sizeof($check); $i++)
	{
	if ($check[$i] == '')
		{
		unset($check[$i]);
		}

	$check = array_values($check);
	}

// if the sizeof CHECK is equal the size of DATE INPUT it means everything went well with no trailing empty problems
// Also that it is the first time that an empty table is passed

if (sizeof(array_filter($date,
function ($value)
	{
	return trim($value) !== '';
	})) == sizeof($check))
	{
	for ($i = 0; $i < sizeof($date); $i++)
		{
		if ($date[$i] == '')
			{
			unset($date[$i]);
			}

		$date = array_values($date);
		}
	}

// If it is not equal it means trailing empty spaces are there
// Also that is not the first time empty table is passed

  else
if (sizeof(array_filter($date,
function ($value)
	{
	return trim($value) !== '';
	})) != sizeof($check))
	{
	$date = array_filter($date,
	function ($value)
		{
		return trim($value) !== '';
		});
	$date = array_values($date);
	}

?>


Рейтинг:
1

W∴ Balboos, GHB

Только одно предостережение - что такое "пустота" ?
Например, что делать, если он равен нулю ?

Есть и другие способы проверки в php, которые позволяют вам довольно много контролировать то, что вы называете пустым.

Примерами являются is_null() и empty() . Есть и другие, с различными нюансами. Было бы хорошо, если бы вы прочитали о них - так они хранятся в вашем уме для дальнейшего использования.

На PHP isset() и против пустой() против переменной is_null() - доклад по Virendra [^]


Рейтинг:
0

EZW

$date = array("11/11/2017","12/11/2017","13/11/2017","14/11/2017","15/11/2017","16/11/2017"," "," ","","");
print_r(array_filter($date, function($value) { return trim($value) !== ''; }));

Может быть, проблема в том, что значения не пусты, а имеют место внутри? Эта функция должна избавиться от этого для вас.


Member 13471028

Спасибо, ваш комментарий очень помог мне найти решение