As of php 5.5 (because of array_column*) you can use
<?php
$num = array (
array ( 'Num' => 2 ), array ( 'Num' => 3 ), array ( 'Num' => 13 ), array ( 'Num' => 2 ),
array ( 'Num' => 3 ), array ( 'Num' => 3 ), array ( 'Num' => 1 ), array ( 'Num' => 44 )
);
$x = array_filter(
array_count_values(
array_column($num, 'Num')
),
function($e) { return $e>1; }
);
var_export($x);
i.e.
- get all the elements 'Num' in $num as a "flat, 1-d" array.
- count the occurence of each value
- only keep count()>1 in the array
--
* in the user contributes notes for array_column there are fill-ins for php <5.5
And since you only have one element per array in $num you could also use array_map/array_shift
edit: a more verbose version without array_column
<?php
$num = array (
array ( 'Num' => 2 ), array ( 'Num' => 3 ), array ( 'Num' => 13 ), array ( 'Num' => 2 ),
array ( 'Num' => 3 ), array ( 'Num' => 3 ), array ( 'Num' => 1 ), array ( 'Num' => 44 )
);
// first remove the superfluous second dimension
$num = array_map(function($e) { return $e['Num']; }, $num); // -> $num = [ 2,3,13,2,3,3,1,44]
$num = array_count_values($num); // -> $num = [2=>2, 3=>3, 13=>1, 1=>1, 44=>1]
$num = array_filter($num, function($e) { return $e>1; }); // -> $num = [2=>2, 3=>3]
printf('There are %d duplicate values. A total of %d elements are doublets',
count($num), array_sum($num)
);
prints There are 2 duplicate values. A total of 5 elements are doublets
Num?Num