在两个php数组中具有唯一值的唯一用户

时间:2015-02-17 08:50:25

标签: php arrays unique

我会立即转到查询。我有一个html表单,有两个字段(电子邮件和数字ID)询问每个用户。每行中的两个值可以不同或完全相同。表单是动态的,并根据要求要求多个电子邮件和数字ID。这两个值都被处理为php数组(电子邮件数组和数字数组)。我要求所有人帮我解决问题的方法是找出具有唯一电子邮件的UNIQUE ROW,并且相关的数值在整个数组中也应该是唯一的。

请帮帮我,这对我来说非常重要。 Thanx提前。形式示例如下:

 1. email-1 num-1
 2. email-2 num-2
 3. email-3 num-3
 4. email-4 num-4
 5. email-2 num-1
 6. email-4 num-1
 7. email-5 num-5
 8. email-2 num-1
 现在,我们必须寻找独特的行或行...这些输入可以是几百个。

这就是我将数组值显示到下一页的方式 -


<?php foreach($BX_EMAIL as $a=>$b){ ?>
<?php echo $a+1; ?>
<?php echo $BX_EMAIL[$a]; ?>
<?php echo $BX_NUM[$a]; ?>
<?php } ?>

现在,此页面之后的预期输出页面只是显示唯一行(具有关联唯一编号的唯一电子邮件)。

示例输入 -

{{1}}

现在,上述输入的输出应为 -
根据手动检查,因为只有10行,结果如下 -

 1. abc@pqr.com 10000
 2. pqr@abc.com 11223
 3. rst@hpq.com 10000
 4. tps@lkc.com 90909
 5. pqr@abc.com 90909
 6. wps@gps.com 11223
 7. tts@pps.com 88997
 8. abc@pqr.com 11223
 9. wps@gps.com 10000
 10.tts@lpg.com 78789

现在在上面的输出中有三组 - 第一组相同,因为相同的NUM和EMAIL使得记录相同。但是第2组和第3组没有连接任何记录。这是我所需的预期分离输出。

我希望这次我很清楚。现在请根据情况多考虑一下。

1 个答案:

答案 0 :(得分:1)

根据您提供的信息,我认为此解决方案已足够:

// ok - this is a reproduction of the two arrays you've got
$BX_EMAIL = array("1@domain.com", "2@domain.com", "3@domain.com", "2@domain.com");
$BX_NUM = array(1,2,3,2);

// merge the two arrays into two-dimensional array
$BX = array();
for($i = 0; $i < count($BX_EMAIL); $i++) 
    $BX[] = array($BX_EMAIL[$i], $BX_NUM[$i]);

// generate one-dimensional array of byte stream values
$bs = array_map("serialize", $BX);

//get unique values
$bs_unique = array_unique($bs);

// revert back to two-dimensional array
$result = array_map("unserialize", $bs_unique);

var_dump($result);

更新根据编辑过的问题修改

// ok - this is a reproduction of the two arrays you've got
$BX_EMAIL = array(
    "abc@pqr.com", "pqr@abc.com", "rst@hpq.com", "tps@lkc.com", 
    "pqr@abc.com","wps@gps.com", "tts@pps.com",
    "abc@pqr.com", "wps@gps.com","tts@lpg.com");
$BX_NUM = array(10000,11223,10000,90909,90909,11223,88997,11223,10000,78789);

// create two-dimensional array
$BX = array();
for($i = 0; $i < count($BX_EMAIL); $i++) 
    $BX[] = array($BX_EMAIL[$i], $BX_NUM[$i]);

// find occurrences for each array
$occurrences_email = array_count_values($BX_EMAIL);
$occurrences_num = array_count_values($BX_NUM);

//filter BX on email and number only occurring once
$result = array_filter($BX, function($value) use(&$occurrences_email, &$occurrences_num) {
    return $occurrences_email[$value[0]] == 1 && $occurrences_num[$value[1]] == 1;
});

var_dump($result);

$BX的密钥仍然保留,因此您可能需要重置密钥:

$result = array_values($result);