我有阵列:
array (size=2)
0 =>
array (size=2)
'name' => string 'Roi'
'email' => string 'roi@pelegisr.com'
1 =>
array (size=2)
'name' => string 'Roi'
'email' => string 'roi@pelegisr.com'
我想防止重复数据(电子邮件地址),所以我添加条件:
if (!in_array($mainIndex['email'], $recip))
$recip[] = array('name' => $name, 'email' => $mainIndex['email'] );
但重复的电子邮件地址仍插入我的阵列。那是为什么?
答案 0 :(得分:0)
<?php
$input = array(
array(
'name' => "test",
'email' => "email@email.com",
),
array(
'name' => "test",
'email' => "email@email.com",
),
array(
'name' => "test2",
'email' => "email@email.com",
),
array(
'name' => "test",
'email' => "email2@email.com",
),
);
$output = array_map("unserialize", array_unique(array_map("serialize", $input)));
print_r($output);
只有当任何行与另一行(===)相等时才会起作用
答案 1 :(得分:0)
如果您不想使用array_filter
$clean = array();
foreach($mainIndex as $arr) {
$clean['email'] = $clean['name'];
}
$mainIndex = array();
foreach($clean as $email => $name) {
$mainIndex[] = array('name' => $name, 'email' => $email);
}
unset($clean);
或者,当您首先将数据加载到$ mainIndex数组中时,将密钥设置为其电子邮件。这将自动删除重复的结果。这是一个经常派上用场的伎俩。您只需重复设置一个键(根据定义必须是唯一的)到给定值。多次迭代最终会得到一个唯一的数据集。