数组中存在键时未定义的索引错误
Posted
技术标签:
【中文标题】数组中存在键时未定义的索引错误【英文标题】:Undefined index error while key exists in array 【发布时间】:2020-09-24 12:38:10 【问题描述】:我在一个看起来很简单的问题上苦苦挣扎,但我找不到解决方案。
我在这里有一个简单的$row
数组:
array:2 [▼
"reference" => "ABCDEF"
"quantity" => "10"
]
我正在尝试解析它并使用以下方法检索每个引用的数量:
$line = [
'ref' => strtoupper($row["reference"]),
'quantity' => $row["quantity"]
];
我正在使用以下代码循环遍历行数组:
foreach ($rows as $row)
$line = [
'ref' => strtoupper($row['reference']),
'quantity' => $row['quantity']
];
作为测试,我的主数组 $rows
有 2 行:
^ array:3 [▼
0 => array:2 [▼
0 => "ABCDEF"
1 => "10"
]
1 => array:2 [▼
0 => "WXCVBN"
1 => "3"
]
2 => array:1 [▼
0 => null
]
]
但是,我收到以下错误:
Undefined index: reference
奇怪的是,如果我注释掉了
'ref' => strtoupper($row["reference"]),
行,我可以毫无问题地获得“数量”值...
我知道钥匙在那里,因为$row
对象的调试给出了上述结果。
这一定很简单......但我找不到解决方案......
如果有人可以帮忙?
【问题讨论】:
你的数量是正常还是有同样的问题? Quantity 不起作用,因为错误已经在前一行触发。如果你 dd($row); 也许你试图在 $row 存在之前访问它。如果有更多关于您从哪里获取该行以及您在哪个位置调用 $row['reference'] 的代码,那么我们可能会提供帮助 @Collin : dd($row) 给出 : ^ array:2 [▼ "reference" => "KKT" "quantity" => "10" ] 请把你的 php 代码放在这里,以便我找到解决方案 【参考方案1】:因此,显然 $row 变量是 foreach 循环中使用的更大数组中的一行。 这可能是您问题的解决方案。
$array = [
[ "reference" => "ABC", "quantity" => "10"],
[ "reference" => "ABC", "quantity" => "10"],
[ "reference" => "ABC", "quantity" => "10"],
];
$line[] = '';
foreach($array as $row)
$line['ref'] = $row['reference'];
$line['quantity'] = $row['quantity'];
在这个例子中 $array 是你更大的数组,我用它来测试这个例子。 之后,我创建一个空数组 $line 来附加“新”数据。
你能试试这个吗?
编辑:
查看您的循环和数组后,我注意到您的数组没有引用键。可以试试strtoupper(row[0])
吗?
【讨论】:
刚刚测试过。没有区别 :( 如果我尝试strtoupper(row[0])
,我会得到:Undefined offset: 0
这就像我无法进入第一列......奇怪......这段代码以前工作过......
请删除输出
那么显然有一个键,如果你不使用 strtoupper 函数,你能访问 $row['reference']
让我们continue this discussion in chat.【参考方案2】:
查看您的代码似乎您将$row
数组转换为$line
而无需在新数组中重写键。
您的代码
foreach ($rows as $row)
$line = [
'ref' => strtoupper($row['reference']),
'quantity' => $row['quantity']
];
通过重写,您可以通过索引而不是键访问$line
数据
array:3 [▼
0 => array:2 [▼
0 => "ABCDEF"
1 => "10"
]
...
]
我的解决方案
如果您想通过密钥访问您的$line
数据,您需要将循环重写为:
foreach($rows as $rowData)
foreach($rowData as $rowKey => $rowValue)
$data = [
'ref' => $rowKey => strtoupper$($rowValue),
'quantity' => $row['quantity']
];
$line[] = $data;
【讨论】:
以上是关于数组中存在键时未定义的索引错误的主要内容,如果未能解决你的问题,请参考以下文章