PHP - массив получает позиции, введенные после N циклов - PullRequest
0 голосов
/ 11 июня 2018

Я имею дело со странной проблемой здесь.У меня есть цикл for, который проходит через массив, состоящий из различных текстовых строк, предварительно введенных пользователем со следующей предустановкой:

Name

Data1 of Name1

Data2 of Name1 (это продолжается для DataN of NameX, поскольку данные - это набор свойств, которые выбирает пользователь [т.е. для 11 столбцов требуется до Name + Data10])

В любом случае, все идет гладко до тех пор, покаминимум в моем тестовом наборе данных, вокруг цикла 400, где вывод массива показывает мне

Name

Пробел

Data1 of Name

Пробелы

Data2 of Name

Когда я проверяю проблемные пользовательские входы, удаляя каждый перед ними и просто вставляя их как единственные входные данные, то есть: Копирование имени и данных 400 и401 и просто вставляя имя и данные 0 и 1, проблем не обнаружено, хотя примерно через 100 циклов следующее Name100 Data1, похоже, испытывает ту же проблему.

TL; DR - PHP Кажется, что вводит пробельные символыпозиции в моем массиве после N циклов, и, кажется, случайноно неуклонно после нескольких сотен петель.Кто-нибудь может просветить меня?Большое спасибо.

PS - я дважды проверил набор данных, и нет пробелов, в которых они отображаются.

for($i = 0; $i < count($statisticsinput); $i++){
      if(strpos($statisticsinput[$i], "Total") !== false){
        if($step !== 2){
          $step++;
          for($k = $i; $k < $i+2*$_POST['columno']; $k++){
            unset($statisticsinput[$k]);
          }
          $statisticsinput = array_values($statisticsinput);
        }else{
          goto firststepended; //Please don't complain about the GOTO it really was needed.
        }
      }
      if($i % $_POST['columno'] == 0){
        $j++;
      }
      $employees[$j][] = $statisticsinput[$i];
    }
    firststepended:

Редактировать: Пример ввода по запросу HtmHell:

Name1



14 000

8 133

70 000

104 760

20 952

0

0

7 543 

10 476 

1º

Name2



9 000

4 796

45 000

34 177

6 835

-3 323

-15 823

0 

3 370 

2º

В значительной степени это повторяется с разными значениями.Нет точного значения, когда появляются пробелы, они просто делают после нескольких сотен циклов.Строка обрабатывается таким образом, что удаляет все пробелы, если следующая строка не в алфавитном порядке.Они находятся в положениях, где следующая строка не в алфавитном порядке, поэтому они должны были быть удалены, если бы они были в вставленном тексте.Но их нет при вставке.

1 Ответ

0 голосов
/ 11 июня 2018

Ваша строка кода, которая разрывает строку в массив, была:

$statisticsinput = preg_split('/\r\n|\r|\n/', $_POST['statistics']);

, которые разделяют массив каждый раз, когда он находит в строке \r\n или \r или \n.Так как в вашей строке несколько разрывов строк подряд, она будет создавать пустые ячейки массива.Итак, прежде всего мы хотим избавиться от нескольких разрывов строк, и только потом разбить их на массив.

$statisticsinput = preg_replace('#\R+#', "\n", $_POST['statistics']); 
$statisticsinput = explode("\n", $statisticsinput);

Таким образом, у вас не будет пустых ячеек массива.

Примечание: \R соответствует \n, \r и \r\n.

...