3

I have this Array:

Array ( [0] => Array ( [Num] => 2 ) [1] => Array ( [Num] => 3 ) [2] => Array ( [Num] => 13 ) [3] => Array ( [Num] => 2 ) [4] => Array ( [Num] => 3 ) [5] => Array ( [Num] => 3 ) [6] => Array ( [Num] => 1 ) [7] => Array ( [Num] => 44 ) ) 

And i want to get the number of duplicate values for example that array have 5 values duplicated. simple way for this problem??help me!

php code:

$count = 0;
$temp = array();
for($i=0;$i<=sizeof($Num);$i++){
    for($j=$i+1;$j<=sizeof($Num);$j++){
        if($Num[$i]==$Num[$j]){
            $count++;
            $temp[]=$Num[$j];
        }
    }
}
var_dump($temp);
echo $count;
2
  • Will $Num always be an array of array each having only the element Num? Commented Dec 5, 2015 at 7:37
  • @VolkerK Yes only one element --> Num Commented Dec 5, 2015 at 7:38

3 Answers 3

1

Solved it without fancy stuff, but it should work:

/**
 * Check if value exists in array
 */
function value_exists($array, $value) {
    $count = 0;
    foreach($array as $v) {
        if($v['Num'] == $value) {
            $count++;
        }
    }
    if ($count > 1) {
        return $count;
    }
}

$duplicated = array();
foreach ($Num as $key => $array ) {
    if($count = value_exists($Num, $array['Num'] )) {
        $duplicated[] = $array['Num'];
    }
}

echo 'Duplicated: ' . count($duplicated);
Sign up to request clarification or add additional context in comments.

3 Comments

your code return 2, But i want return 5 (Count of duplicate values)
duplicate values: 2,3,2,3,3 and count of duplicate values 5
@FatemehNamkhah it was counting items instead of values, updated, its fine now
1

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

5 Comments

your code return array ( 2 => 2, 3 => 3, ) but i want count of duplicate value and i want return 5
my version of php == 5.3.28
i want return 5 throw in another array_sum ;-) "php == 5.3.28" - use the fill-ins
duplicate values: 2,3,2,3,3 and count of duplicate values 5
yeah, yeah, there's you copy&paste version.
0

for PHP 5 >= 5.5.0, PHP 7

$Num = array ( 
        "0" => array ( 'Num' => 2 ),
        "1" => array ( 'Num' => 3 ), 
        "2" => array ( 'Num' => 13), 
        "3" => array ( 'Num' => 2 ), 
        "4" => array ( 'Num' => 3 ), 
        "5" => array ( 'Num' => 3 ), 
        "6" => array ( 'Num' => 1 ), 
        "7" => array ( 'Num' => 44 ) );

$subArr = array_column($Num, 'Num');
$countArr = array_count_values($subArr);//array with all count
$filteredArr = array_filter($countArr, function ($val) {return $val > 1;});//filter that is having duplicates
echo "Count of Duplicate : ".array_sum($filteredArr);

else

$Num = array ( 
        "0" => array ( 'Num' => 2 ),
        "1" => array ( 'Num' => 3 ), 
        "2" => array ( 'Num' => 13), 
        "3" => array ( 'Num' => 2 ), 
        "4" => array ( 'Num' => 3 ), 
        "5" => array ( 'Num' => 3 ), 
        "6" => array ( 'Num' => 1 ), 
        "7" => array ( 'Num' => 44 ) );
$countArr = array();
foreach ($Num AS $eachArr) {
    $countArr[$eachArr['Num']] += 1;
}

$filteredArr = array_filter($countArr, function ($val) {return $val > 1;});//filter that is having duplicates
echo "Count of Duplicate : ".array_sum($filteredArr);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.