Php 如何检查多维数组中是否存在某些索引的重复值?
我的问题是我有一个从表单到php的多维数组,现在我想检查多维数组中是否存在某些索引的重复值? e、 g: 这里索引1和索引2的名称和类型是相同的,所以我如何检查它 我熟悉Php 如何检查多维数组中是否存在某些索引的重复值?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我的问题是我有一个从表单到php的多维数组,现在我想检查多维数组中是否存在某些索引的重复值? e、 g: 这里索引1和索引2的名称和类型是相同的,所以我如何检查它 我熟悉 $key = array_search('abc', array_column($data, 'type')); 但是,对于多行中的单列值的重复,在我的情况下,如果同一行的多行与任何其他行的多列相同,则记录将被认为是重复的。 感谢您的帮助。您可以尝试使用array\u reduce使用所需的项目键创建一个键: $result
$key = array_search('abc', array_column($data, 'type'));
但是,对于多行中的单列值的重复,在我的情况下,如果同一行的多行与任何其他行的多列相同,则记录将被认为是重复的。
感谢您的帮助。您可以尝试使用
array\u reduce
使用所需的项目键创建一个键:
$result = array_reduce($data, function ($carry, $item) {
$key = $item['uid'] . $item['type'];
$item['is_duplicate'] = isset($carry[$key]);
if ($item['is_duplicate']) {
$carry[] = $item;
} else {
$carry[$key] = $item;
}
return $carry;
}, []);
var_dump($result);
您可以尝试使用
array\u reduce
,方法是使用所需的项目键创建一个键:
$result = array_reduce($data, function ($carry, $item) {
$key = $item['uid'] . $item['type'];
$item['is_duplicate'] = isset($carry[$key]);
if ($item['is_duplicate']) {
$carry[] = $item;
} else {
$carry[$key] = $item;
}
return $carry;
}, []);
var_dump($result);
最简单的方法,至少我会使用的方法是将数组编码为md5(或任何其他类型)字符串并比较这些值<我认为这对你来说是最有效的 示例:
<?php
function arrayToString($array) {
$str = '';
if ( !is_array($array) )
return $str;
foreach ( $array as $key => $val ) {
$str .= $key . ':' . $val;
}
return $str;
}
$data=Array
(
0 => Array
(
'uid' => '100',
'name' => 'Sandra Shush',
'type' => 'abc'
),
1 => Array
(
'uid' => '100',
'name' => 'Sandra Shush',
'type' => 'xyz'
),
2 => Array
(
'uid' => '100',
'name' => 'Sandra Shush',
'type' => 'abc'
)
);
$temp = array();
foreach ( $data as $d ) {
array_push($temp, md5(arrayToString($d)));
}
$unique = array_unique($temp);
var_dump($unique); // prints unique array
最简单的方法,至少我会使用的方法是将数组编码为md5(或任何其他类型)字符串并比较这些值<我认为这对你来说是最有效的
示例:
<?php
function arrayToString($array) {
$str = '';
if ( !is_array($array) )
return $str;
foreach ( $array as $key => $val ) {
$str .= $key . ':' . $val;
}
return $str;
}
$data=Array
(
0 => Array
(
'uid' => '100',
'name' => 'Sandra Shush',
'type' => 'abc'
),
1 => Array
(
'uid' => '100',
'name' => 'Sandra Shush',
'type' => 'xyz'
),
2 => Array
(
'uid' => '100',
'name' => 'Sandra Shush',
'type' => 'abc'
)
);
$temp = array();
foreach ( $data as $d ) {
array_push($temp, md5(arrayToString($d)));
}
$unique = array_unique($temp);
var_dump($unique); // prints unique array
这是一种设计速度非常快的方法,可以找到重复的方法。请注意,重复项是对同一键具有相同值的元素。因此,如果uid
、name
或type
中的任何一个匹配,它们将被视为重复项。因此,我调整了第三个数组元素,因为数组中的所有元素都共享相同的值
$data = [
....
2 =>
[
'uid' => '200',
'name' => 'Mandra Shush',
'type' => 'abcx'
]
];
$duplicates = [];
$valuesToCompare = ["uid", "name", "type"];
function equals($value, $toCompare, $keysToCompare)
{
foreach ($keysToCompare as $compareKey) {
if ($value[$compareKey] === $toCompare[$compareKey]) {
return true;
}
}
return false;
}
foreach ($data as $index => $element) {
foreach ($data as $indexInner => $elementToCompare) {
if ($index !== $indexInner) {
if (equals($element, $elementToCompare, $valuesToCompare)) {
$duplicates[] = [$index => $indexInner];
}
}
}
}
var_dump($duplicates);
这将输出以下内容,这表明我们发现了2个重复项。其中,元素0是1的副本,1是0的副本
array (size=2)
0 =>
array (size=1)
0 => int 1
1 =>
array (size=1)
1 => int 0
这是一种非常快速的设计方法,可以找到重复的方法。请注意,重复项是对同一键具有相同值的元素。因此,如果uid
、name
或type
中的任何一个匹配,它们将被视为重复项。因此,我调整了第三个数组元素,因为数组中的所有元素都共享相同的值
$data = [
....
2 =>
[
'uid' => '200',
'name' => 'Mandra Shush',
'type' => 'abcx'
]
];
$duplicates = [];
$valuesToCompare = ["uid", "name", "type"];
function equals($value, $toCompare, $keysToCompare)
{
foreach ($keysToCompare as $compareKey) {
if ($value[$compareKey] === $toCompare[$compareKey]) {
return true;
}
}
return false;
}
foreach ($data as $index => $element) {
foreach ($data as $indexInner => $elementToCompare) {
if ($index !== $indexInner) {
if (equals($element, $elementToCompare, $valuesToCompare)) {
$duplicates[] = [$index => $indexInner];
}
}
}
}
var_dump($duplicates);
这将输出以下内容,这表明我们发现了2个重复项。其中,元素0是1的副本,1是0的副本
array (size=2)
0 =>
array (size=1)
0 => int 1
1 =>
array (size=1)
1 => int 0
我实现了上述场景,如下所示:
不知道哪一个是最好的我或其他谁张贴的答案
foreach($data as $key => $row)
{
$combinedarr[] = array("name"=>$row["name"],"type"=>$row["type"]);
}
//chck if same facilitiy is being visit on same date twice
$countcomb = count($combinedarr);
$uniquearr = array_unique($combinedarr, SORT_REGULAR);
if($countcomb==count($uniquearr)){
}else{
//yes duplicate exists
};
再次感谢您的回答。我实现了上述情景,如下所示:
不知道哪一个是最好的我或其他谁张贴的答案
foreach($data as $key => $row)
{
$combinedarr[] = array("name"=>$row["name"],"type"=>$row["type"]);
}
//chck if same facilitiy is being visit on same date twice
$countcomb = count($combinedarr);
$uniquearr = array_unique($combinedarr, SORT_REGULAR);
if($countcomb==count($uniquearr)){
}else{
//yes duplicate exists
};
再次感谢那些回答问题的人