如何从数组中仅获取重复值

时间:2017-01-20 10:36:53

标签: php

我需要帮助查找数组中的项目,以显示某些项目是否重复或超过2以显示结果,我一直在寻找这个太久了,现在我需要你们的帮助。 这是我的数组项目

Array
(
    [0] => Array
        (
            [1] => 1:30am
            [2] => 2:00am
            [3] => 3:00am
        )

    [1] => Array
        (
            [1] => 2:30am
            [2] => 5:00am
            [3] => 6:30am
        )

    [2] => Array
        (
            [1] => 2:00am
            [2] => 3:00am
            [3] => 5:00am
        )

)

并尝试使用array_count_values()返回

  

警告:array_count_values():只能计算STRING和INTEGER   值!

并使用array_uniquearray_diff_assoc()返回

  

注意:数组转换为字符串

请帮忙,谢谢

4 个答案:

答案 0 :(得分:0)

试试这个:

$unique = array_unique($array, SORT_REGULAR);

SORT_REGULAR确保它不会使用字符串比较。

答案 1 :(得分:0)

您必须在数组中循环,然后在子数组中再次循环。从那里,您可以构建一个具有唯一值的数组,以及一个包含重复项的数组:

<?php 

$array = array(
    array('1:30 am', '2:00 am', '3:00 am'),
    array('2:30 am', '5:00 am', '6:30 am'),
    array('2:00 am', '3:00 am', '5:00 am')
);

$unique = $dupes = array();
foreach ($array as $subarray) {
    foreach ($subarray as $value) {
        if (!in_array($value, $unique))
            $unique[] = $value;
        else
            $dupes[] = $value;
    }
}

print_r(array_unique($dupes)); // Array ( [0] => 2:00 am [1] => 3:00 am [2] => 5:00 am ) 

答案 2 :(得分:0)

因此,为了获得每次的计数,您可以创建一个临时数组,并将每个时间字符串作为该数组的键,然后按如下方式增加其计数:

Array
(
    [1:30am] => 1
    [2:00am] => 2
    [3:00am] => 2
    [2:30am] => 1
    [5:00am] => 2
    [6:30am] => 1
)

打印:

$duplicates = array_filter($countArr, function($value) {
    if($value>1)
        return true;
});

print_r($duplicates);

同样,如果你需要找到重复项,

Array
(
    [2:00am] => 2
    [3:00am] => 2
    [5:00am] => 2
)

将打印:

ids = Profile.objects.values_list('user_id', flat=True)

检查EVAL

答案 3 :(得分:0)

只是为了好玩,这里只有几行:

$values = array(
    array('1:30am', '2:00am', '3:00am'),
    array('2:30am', '5:00am', '6:30am'),
    array('2:00am', '3:00am', '5:00am')
);

$flatten = array();
array_walk_recursive($values, function ($item) use (&$flatten) {$flatten[]=$item;});
$duplicates = array_keys(array_filter(array_count_values($flatten),function($item){return $item>1;}));

print_r($duplicates);

当然,可读性大约为零。

主要的一点是你必须使用一维数组来使用大多数PHP的数组函数。所以你必须首先压扁你的多维数组。