php - PHP - 数组在 N 次循环后注入位置
问题描述
我在这里处理一个奇怪的问题。我有一个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º
这几乎只是重复了不同的值。空白出现时没有确切的值,它们只是在几百个周期后出现。如果下一行不是字母顺序,则以删除所有空格的方式处理字符串。它们位于下一行不是按字母顺序排列的位置,因此如果它们在粘贴的文本中,它们应该被删除。但是粘贴时它们不存在。
解决方案
您将字符串分解为数组的代码行是:
$statisticsinput = preg_split('/\r\n|\r|\n/', $_POST['statistics']);
每次在字符串\r\n
or \r
or中找到时都会将数组分开\n
。由于您的字符串中有多个连续换行符,因此它显然会生成空数组单元格。所以首先我们要去掉多个换行符,然后才把它分解成数组。
$statisticsinput = preg_replace('#\R+#', "\n", $_POST['statistics']);
$statisticsinput = explode("\n", $statisticsinput);
这样你就不会有空的数组单元格。
注意:\R
匹配\n
,\r
和\r\n
.
推荐阅读
- css - :hover on SVG g 元素仅适用于 g 内部的路径也悬停时
- entity-framework - 如何添加新的迁移而无需手动删除已经存在的表?
- php - Laravel 使用正则表达式断言重定向
- laravel-5.6 - 如何从 Laravel 的 foreach 语句中提取一个值
- vue.js - 使用 vuelidate 进行动态集合验证
- python-3.x - 如何从目录中的多个目录导入图像文件
- php - 使用另一个网站的特定位置时从上游读取响应标头时在标准错误中发送的 FastCGI:“主脚本未知”
- html - 如何在较小的屏幕上将 2 行和 2 列移动到 1 行但按顺序正确列
- msbuild - Azure DevOps 上的构建错误 - 由多个目标框架组成的解决方案
- sql-server - 从行的其余部分不重复的一个文件中删除重复项