在两个 php 数组中具有唯一值的唯一用户
Unique user having unique values in two php arrays
我将立即转到查询。我有一个 html 表单,其中有两个字段(电子邮件和数字 ID)向每个用户询问。每行中的两个值可以不同或完全相同。该表单是动态的,并且根据要求要求提供多个电子邮件和数字 ID。这两个值都被处理为 php 数组(电子邮件数组和数字数组)。我请求大家帮我解决这个问题是为了找出具有唯一电子邮件的 UNIQUE ROW,并且相关的数值在整个数组中也应该是唯一的。
请帮帮我,这对我来说很重要。
提前谢谢。表格示例如下:
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.abc@pqr.com10000
2.pqr@abc.com11223
3.第一个@hpq.com10000
4. tps@lkc.com 90909
5.pqr@abc.com90909
6.wps@gps.com11223
7. tts@pps.com 88997
8.abc@pqr.com11223
9.wps@gps.com10000
10.tts@lpg.com78789
现在,上面输入的输出应该是-
按照人工检查只有10行,结果如下 -
abc@pqr.com
10000
abc@pqr.com
11223
wps@gps.com
10000
第一@hpq.com
10000
wps@gps.com
11223
pqr@abc.com
11223
pqr@abc.com
90909
tps@lkc.com
90909
************************
tts@lpg.com
78789
************************
tts@pps.com
88997
现在在上面的输出中有三组 - 第一组相同,因为彼此有相同的 NUM 和 EMAIL,这使得记录相同。但是,第二组和第三组在任何地方都没有任何记录。这是我要求的预期分离输出。
我希望这次我已经足够清楚了。现在请根据情况多考虑一下
根据您提供的信息,我认为这个解决方案就足够了:
// 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);
UPDATE 根据已编辑的问题修改
// 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);
我将立即转到查询。我有一个 html 表单,其中有两个字段(电子邮件和数字 ID)向每个用户询问。每行中的两个值可以不同或完全相同。该表单是动态的,并且根据要求要求提供多个电子邮件和数字 ID。这两个值都被处理为 php 数组(电子邮件数组和数字数组)。我请求大家帮我解决这个问题是为了找出具有唯一电子邮件的 UNIQUE ROW,并且相关的数值在整个数组中也应该是唯一的。
请帮帮我,这对我来说很重要。 提前谢谢。表格示例如下:
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.abc@pqr.com10000 2.pqr@abc.com11223 3.第一个@hpq.com10000 4. tps@lkc.com 90909 5.pqr@abc.com90909 6.wps@gps.com11223 7. tts@pps.com 88997 8.abc@pqr.com11223 9.wps@gps.com10000 10.tts@lpg.com78789
现在,上面输入的输出应该是-
按照人工检查只有10行,结果如下 -
abc@pqr.com 10000 abc@pqr.com 11223 wps@gps.com 10000 第一@hpq.com 10000 wps@gps.com 11223 pqr@abc.com 11223 pqr@abc.com 90909 tps@lkc.com 90909 ************************ tts@lpg.com 78789 ************************ tts@pps.com 88997
现在在上面的输出中有三组 - 第一组相同,因为彼此有相同的 NUM 和 EMAIL,这使得记录相同。但是,第二组和第三组在任何地方都没有任何记录。这是我要求的预期分离输出。
我希望这次我已经足够清楚了。现在请根据情况多考虑一下
根据您提供的信息,我认为这个解决方案就足够了:
// 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);
UPDATE 根据已编辑的问题修改
// 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);