我需要帮助查找数组中的项目,以显示某些项目是否重复或超过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_unique
,array_diff_assoc()
返回
注意:数组转换为字符串
请帮忙,谢谢
答案 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的数组函数。所以你必须首先压扁你的多维数组。