Php 键未定义,但有键
Php key is undefined, but there is key
我正在从另一个数组创建自己的数组,使用电子邮件字段作为键值。如果同一封电子邮件有更多结果,我会 array_push
到现有密钥。
我总是在数组中获取数据(通过电子邮件),这是示例
输入数据
示例数据
$saved_data = [
0 => ['custom_product_email' => 'test@test.com',...],
1 => ['custom_product_email' => 'test@test.com',...],
2 => ['custom_product_email' => 'bla@test.com',...],
3 => ['custom_product_email' => 'bla@test.com',...],
...
];
代码
$data = [];
foreach ($saved_data as $products) {
$curVal = $data[$products->custom_product_email];
if (!isset($curVal)) {
$data[$products->custom_product_email] = [];
}
array_push($data[$products->custom_product_email], $products);
}
错误
我收到错误 Undefined index: test@test.com
,如果我调试我的数组,存在值为 'test@test.com'
的键,所以键已定义 (!)
所以 var $curVal
键是 undefined
结果
所以 foreach 的目标是过滤数组中具有相同电子邮件的所有对象,示例如下:
$data = [
'test@test.com' => [
0 => {data},
1 => {data},
...
],
'bla@test.com' => [
0 => {data},
1 => {data},
...
],
];
检查 $data[$products->custom_product_email]
是否已经设置在 $data
数组中
试试这个代码
$data = [];
foreach ($saved_data as $products) {
$curVal = isset($data[$products->custom_product_email]) ? $data[$products->custom_product_email] : null;
if (!isset($curVal)) {
$data[$products->custom_product_email] = [];
}
array_push($data[$products->custom_product_email], $products);
}
你没看到错误信息吗?
Parse error: syntax error, unexpected '{' in ..... from this code
$saved_data = [
0 => {'custom_product_email' => 'test@test.com',...},
1 => {'custom_product_email' => 'test@test.com',...},
2 => {'custom_product_email' => 'bla@test.com',...},
3 => {'custom_product_email' => 'bla@test.com',...},
...
];
将 {}
更改为 []
以正确生成数组。
$saved_data = [
0 => ['custom_product_email' => 'test@test.com',...],
1 => ['custom_product_email' => 'test@test.com',...],
2 => ['custom_product_email' => 'bla@test.com',...],
3 => ['custom_product_email' => 'bla@test.com',...],
...
];
您的下一期在此代码中
$data = [];
foreach ($saved_data as $products) {
$curVal = $data[$products->custom_product_email];
// ^^^^^
$data
是您在上面两行初始化的空数组,因此它不包含任何键或数据!
这一行 $curVal = $data[$products->custom_product_email];
没有用,并且是引发错误的行:您刚刚将 $data 初始化为一个空数组,逻辑上索引未定义。
你应该直接测试if (!isset($data[$products->custom_product_email])) {
然后解释:检索未定义的数组索引的值与isset
中的相同代码之间存在根本区别。后者评估变量的存在,你可以放入不存在的东西(比如未定义的数组索引访问)。但是你不能在测试前将它存储在变量中。
我正在从另一个数组创建自己的数组,使用电子邮件字段作为键值。如果同一封电子邮件有更多结果,我会 array_push
到现有密钥。
我总是在数组中获取数据(通过电子邮件),这是示例
输入数据
示例数据
$saved_data = [
0 => ['custom_product_email' => 'test@test.com',...],
1 => ['custom_product_email' => 'test@test.com',...],
2 => ['custom_product_email' => 'bla@test.com',...],
3 => ['custom_product_email' => 'bla@test.com',...],
...
];
代码
$data = [];
foreach ($saved_data as $products) {
$curVal = $data[$products->custom_product_email];
if (!isset($curVal)) {
$data[$products->custom_product_email] = [];
}
array_push($data[$products->custom_product_email], $products);
}
错误
我收到错误 Undefined index: test@test.com
,如果我调试我的数组,存在值为 'test@test.com'
的键,所以键已定义 (!)
所以 var $curVal
键是 undefined
结果
所以 foreach 的目标是过滤数组中具有相同电子邮件的所有对象,示例如下:
$data = [
'test@test.com' => [
0 => {data},
1 => {data},
...
],
'bla@test.com' => [
0 => {data},
1 => {data},
...
],
];
检查 $data[$products->custom_product_email]
是否已经设置在 $data
数组中
试试这个代码
$data = [];
foreach ($saved_data as $products) {
$curVal = isset($data[$products->custom_product_email]) ? $data[$products->custom_product_email] : null;
if (!isset($curVal)) {
$data[$products->custom_product_email] = [];
}
array_push($data[$products->custom_product_email], $products);
}
你没看到错误信息吗?
Parse error: syntax error, unexpected '{' in ..... from this code
$saved_data = [
0 => {'custom_product_email' => 'test@test.com',...},
1 => {'custom_product_email' => 'test@test.com',...},
2 => {'custom_product_email' => 'bla@test.com',...},
3 => {'custom_product_email' => 'bla@test.com',...},
...
];
将 {}
更改为 []
以正确生成数组。
$saved_data = [
0 => ['custom_product_email' => 'test@test.com',...],
1 => ['custom_product_email' => 'test@test.com',...],
2 => ['custom_product_email' => 'bla@test.com',...],
3 => ['custom_product_email' => 'bla@test.com',...],
...
];
您的下一期在此代码中
$data = [];
foreach ($saved_data as $products) {
$curVal = $data[$products->custom_product_email];
// ^^^^^
$data
是您在上面两行初始化的空数组,因此它不包含任何键或数据!
这一行 $curVal = $data[$products->custom_product_email];
没有用,并且是引发错误的行:您刚刚将 $data 初始化为一个空数组,逻辑上索引未定义。
你应该直接测试if (!isset($data[$products->custom_product_email])) {
然后解释:检索未定义的数组索引的值与isset
中的相同代码之间存在根本区别。后者评估变量的存在,你可以放入不存在的东西(比如未定义的数组索引访问)。但是你不能在测试前将它存储在变量中。