数组中存在键时未定义的索引错误

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;


【讨论】:

以上是关于数组中存在键时未定义的索引错误的主要内容,如果未能解决你的问题,请参考以下文章

使用内连接 SQL 语句时未定义的索引

删除 $_SESSION 时未定义的索引

声明变量时未定义的索引

使用本地头文件时未定义的引用

变量存在时未定义的变量 laravel

奇怪的错误未定义的索引“项目”