我在php中有一个二维数组,如下所示:
Array (
[0] => Array
(
[index1] => -1
[index2] => 77
[description] => 7
)
[1] => Array
(
[index1] => -1
[index2] => 77
[description] => 5
)
[2] => Array
(
[index1] => -1
[index2] => 78
[description] => 12
)
)
我需要查找第一级数组之间是否存在重复。 但只考虑键index1和index2。
在上面的示例中,它应该返回true,因为0和1具有相同的index1和index2。
答案 0 :(得分:2)
试试这个:
<?php
$a=array(
array('index1'=>-1,'index2'=>77,'description'=>7),
array('index1'=>-1,'index2'=>77,'description'=>5),
array('index1'=>-1,'index2'=>78,'description'=>12)
);
function check($a){
$data=array();
foreach($a as $arr){
if ($data[$arr['index1'].'|'.$arr['index2']]) {
return true;
}
$data[$arr['index1'].'|'.$arr['index2']]=true;
}
return false;
}
if (check($a)) {
echo "duplicates found";
}else{
echo "no duplicates";
}
?>
答案 1 :(得分:1)
function hasDupes($array, $delim = '|') {
$values = array();
foreach ($array as $v) {
$v = $v['index1'] . $delim . $v['index2'];
if (isset($values[$v])) {
return true;
}
$values[$v] = 0;
}
return false;
}
不需要在数组上嵌套循环或完整遍历(甚至多次遍历),这是大多数建议的array_something函数在内部执行的操作。当你看到一个你以前见过的元素时,迭代一次并停止。
答案 2 :(得分:0)
两种可以帮助您的方法:
1.如果您只想删除可以使用的副本:
http://php.net/manual/en/function.array-unique.php
2.如果你想找到副本,你可以扫描数组,并且每个&#34; item - 使用以下方法检查数组的其余部分:
http://php.net/manual/en/function.array-search.php
答案 3 :(得分:0)
这不是一个非常有效的算法,但假设外部数组的蛮力方式是数字索引:
function hasDuplicates($array) {
$count = count($array);
for ($i = 0; $i < $count; $i++){
for ($j = $i+1; $j < $count; j++) { // check every later element in the array
if ($array[i]['index1'] == $array[j]['index1'] && $array[i]['index2'] == $array[j]['index2']) {
return true;
}
}
}
return false;
}
答案 4 :(得分:0)