我有一个包含13项的数组,如下所示:
$skus = array(
"PK 800G",
"CH 800G",
"910G",
"400G",
"1.5KG",
"1KG",
"A 1KG",
"E 1KG",
"D 1KG",
"2 G.",
"ESSENCE",
"N 800G.",
"H 800 G"
);
我的问题是,如果我在数组中有13项,下面的代码会给我错误:
(1/1) ErrorException
Undefined offset: 13
但是如果我从数组中删除一项,并将其设置为"12“,那么它可以很好地工作。我确信这是因为循环。但是我想不出来。
$total = count($skus);
$skuKeys = array_keys($skus);
$iter = ceil($total / 4);
for ($n = 0; $n <= $iter; $n++) {
$row = ["G", "A"];
$row2 = ["", ""];
for ($j = $n*4; $j < 4 * ($n+1); $j++) {
if ($j == 2) {
$row = array_merge($row, ["RT + PK","","","","","",""]);
$row2 = array_merge($row2, ["TY", "LY", "YTD", "TY", "LY", "MTD", ""]);
}
$row = array_merge($row, [$skuKeys[$j],"","","","","",""]);
$row2 = array_merge($row2, ["TY", "LY", "YTD", "TY", "LY", "MTD", ""]);
}
}
有谁能帮帮我吗?
谢谢。
发布于 2019-01-25 14:11:23
你有几个问题。首先,在计算$iter
时,需要使用
$iter = floor(($total - 1) / 4);
否则,对于4的倍数的$total
,您将在循环中进行多次迭代,并且由于您在外部for循环中使用$n <= $iter
,因此您需要使用floor
而不是ceil
,否则您将在循环中再次进行多次迭代。
您的第二个问题(也是导致错误消息的问题)是,在您的内部for循环中,您没有检查您是否仍然在数组的边界内。因此,在for
之后,您需要添加对此的检查:
if ($j == $total) break;
因此,您的代码应更改为:
$iter = floor(($total - 1) / 4);
for ($n = 0; $n <= $iter; $n++) {
$row = ["G", "A"];
$row2 = ["", ""];
for ($j = $n*4; $j < 4 * ($n+1); $j++) {
if ($j == $total) break;
if ($j == 2) {
$row = array_merge($row, ["RT + PK","","","","","",""]);
$row2 = array_merge($row2, ["TY", "LY", "YTD", "TY", "LY", "MTD", ""]);
}
$row = array_merge($row, [$skuKeys[$j],"","","","","",""]);
$row2 = array_merge($row2, ["TY", "LY", "YTD", "TY", "LY", "MTD", ""]);
}
}
我怀疑您的代码中还存在其他问题(除非您在循环中对$row
和$row2
做了一些尚未向我们展示的操作),因为您会在每次通过外部循环时覆盖$row
和$row2
的值。但是,这些修复将解决您当前的问题。
发布于 2019-01-25 12:54:34
实际上,您正在处理的array
的长度比数组的长度小1。试试..。
$total = count($skus);
$skuKeys = array_keys($skus);
$iter = ceil($total / 4);
for ($n = 0; $n < $iter; $n++) {
$row = ["G", "A"];
$row2 = ["", ""];
for ($j = $n*4; $j < 4 * ($n+1); $j++) {
if ($j == 2) {
$row = array_merge($row, ["RT + PK","","","","","",""]);
$row2 = array_merge($row2, ["TY", "LY", "YTD", "TY", "LY", "MTD", ""]);
}
$row = array_merge($row, [$skuKeys[$j],"","","","","",""]);
$row2 = array_merge($row2, ["TY", "LY", "YTD", "TY", "LY", "MTD", ""]);
}
}
发布于 2019-01-25 13:58:42
试试这个:
$skus = array(
"PK 800G",
"CH 800G",
"910G",
"400G",
"1.5KG",
"1KG",
"A 1KG",
"E 1KG",
"D 1KG",
"2 G.",
"ESSENCE",
"N 800G.",
"H 800 G"
);
$total = count($skus);
$skuKeys = array_keys($skus);
$iter = round($total / 4);
for ($n = 0; $n < $iter; $n++) {
$row = ["G", "A"];
$row2 = ["", ""];
for ($j = $n*4; $j < 4 * ($n+1); $j++) {
if ($j == 2) {
$row = array_merge($row, ["RT + PK","","","","","",""]);
$row2 = array_merge($row2, ["TY", "LY", "YTD", "TY", "LY", "MTD", ""]);
}
$row = array_merge($row, [$skuKeys[$j],"","","","","",""]);
$row2 = array_merge($row2, ["TY", "LY", "YTD", "TY", "LY", "MTD", ""]);
}
}
var_dump($row);
var_dump($row2);
https://stackoverflow.com/questions/54359077
复制相似问题