in_array - 防止数组中的重复数据

时间:2015-03-01 14:08:01

标签: php

我有阵列:

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'] );

但重复的电子邮件地址仍插入我的阵列。那是为什么?

2 个答案:

答案 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数组中时,将密钥设置为其电子邮件。这将自动删除重复的结果。这是一个经常派上用场的伎俩。您只需重复设置一个键(根据定义必须是唯一的)到给定值。多次迭代最终会得到一个唯一的数据集。