【发布时间】:2018-05-31 13:40:06
【问题描述】:
我正在从另一个数组中创建自己的数组,使用电子邮件字段作为键值。如果同一电子邮件有更多结果,我将 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},
...
],
];
【问题讨论】:
-
@Kaddath 让它成为答案
-
我会说整个 if() 是不必要的。检查是否设置了数组,如果没有,则在此处创建一个空数组,然后将数据添加到空数组中。您不需要检查它是否存在,您可以将数据推送到那里。 PHP 将在您将数据推送到那里时创建数组。
-
示例数据不是有效的PHP。
-
@Kaddath 谢谢,简单而干净的解决方案......我忽略了那个错误:D
-
@Kaddath 请在下面添加您的答案,我会将其标记为正确的答案以防止其他人的 cmets:D
标签: php arrays undefined-index array-filter