PHP सरणी में डुप्लिकेट मानों का पता लगाने के लिए कैसे?


115

मैं PHP में एक आयामी सरणी के साथ काम कर रहा हूं। मैं डुप्लिकेट मानों की उपस्थिति का पता लगाना चाहता हूं, फिर डुप्लिकेट मानों की संख्या की गणना करें और परिणाम डालें। उदाहरण के लिए, निम्नलिखित सारणी दी गई है:

$array = array('apple', 'orange', 'pear', 'banana', 'apple',
   'pear', 'kiwi', 'kiwi', 'kiwi');

मैं प्रिंट करना चाहता हूं:

apple (2)
orange
pear (2)
banana
kiwi (3)

इस समस्या से कैसे संपर्क करें?

धन्यवाद।

माइक

जवाबों:


239

आप array_count_values फ़ंक्शन का उपयोग कर सकते हैं

$array = array('apple', 'orange', 'pear', 'banana', 'apple',
'pear', 'kiwi', 'kiwi', 'kiwi');

print_r(array_count_values($array));

उत्पादन होगा

Array
(
   [apple] => 2
   [orange] => 1
   [pear] => 2
   etc...
)

1
यह समाधान किसी भी गैर-पूर्णांक और गैर-स्ट्रिंग मान को कवर नहीं करता है और निष्कर्ष में यह साइडफ़ेक्ट पैदा करता है।
कोडकांडिस

110
if(count(array_unique($array))<count($array))
{
    // Array has duplicates
}
else
{
    // Array does not have duplicates
}

"... फिर डुप्लिकेट मानों की संख्या की गणना करें और परिणाम डालें।"
शोदेव

यह समाधान किसी भी गैर-पूर्णांक और गैर-स्ट्रिंग मान को कवर नहीं करता है और निष्कर्ष में यह साइडफ़ेक्ट पैदा करता है। array_unique($array, SORT_REGULAR)प्रकार बदलने के बिना सामान्य रूप से तत्वों की जांच करने के लिए PHP का उपयोग करना , लेकिन यह एक ढीली तुलना है। एक ही सामग्री के साथ एक वर्ग के विभिन्न उदाहरणों को अद्वितीय बनाया जाएगा।
कोडकांडिस

38
function array_not_unique( $a = array() )
{
  return array_diff_key( $a , array_unique( $a ) );
}

1
यह एकमात्र उत्तर है जो केवल डुप्लिकेट मानों को लौटाता है।
Redzarf

1
केवल डुप्लिकेट मानों की सूची देने के लिए विस्तारित (जो मुझे आवश्यक था):return array_values(array_unique(array_diff_key($a, array_unique($a))));
शरद ऋतु लियोनार्ड

9

आप उस सरणी को कुंजी के रूप में फलों के साथ एक साहचर्य सरणी में बदल सकते हैं और मूल्यों की संख्या हो सकती है। बिट लंबी-घुमावदार, लेकिन ऐसा दिखता है:

$array = array('apple', 'orange', 'pear', 'banana', 'apple',
   'pear', 'kiwi', 'kiwi', 'kiwi');
$new_array = array();
foreach ($array as $key => $value) {
    if(isset($new_array[$value]))
        $new_array[$value] += 1;
    else
        $new_array[$value] = 1;
}
foreach ($new_array as $fruit => $n) {
    echo $fruit;
    if($n > 1)
        echo "($n)";
    echo "<br />";
}

1
अच्छा जवाब है, लेकिन PHP का एक मौजूदा कार्य है जो सिर्फ यही करता है: array_count_values
Navarr

9

उपयोग से छुटकारा पाने के लिए array_unique()। यह पता लगाने के लिए कि क्या कोई उपयोग है count(array_unique())और तुलना करना है count($array)



2

शायद ऐसा ही कुछ (अनकहा कोड लेकिन आपको एक विचार देना चाहिए)?

$new = array();

foreach ($array as $value)
{
    if (isset($new[$value]))
        $new[$value]++;
    else
        $new[$value] = 1;
}

फिर आपको कुंजियों के रूप में मानों के साथ एक नया सरणी मिलेगा और उनका मान मूल सरणी में मौजूद समय की संख्या है।


अच्छा जवाब है, लेकिन PHP का एक मौजूदा कार्य है जो सिर्फ यही करता है: array_count_values
Navarr

0
$count = 0;
$output ='';
$ischeckedvalueArray = array();
for ($i=0; $i < sizeof($array); $i++) {
    $eachArrayValue = $array[$i];
    if(! in_array($eachArrayValue, $ischeckedvalueArray)) {
        for( $j=$i; $j < sizeof($array); $j++) {
            if ($array[$j] === $eachArrayValue) {
                $count++;
            }
        }
        $ischeckedvalueArray[] = $eachArrayValue;
        $output .= $eachArrayValue. " Repated ". $count."<br/>";
        $count = 0;
    }

}

echo $output;

0

मुझे वह उत्तर नहीं मिला, जिसकी मुझे तलाश थी, इसलिए मैंने यह फ़ंक्शन लिखा। यह एक ऐसा सरणी बना देगा जिसमें केवल दो सरणियों के बीच के डुप्लिकेट होते हैं, लेकिन एक तत्व के दोहराए जाने की संख्या को प्रिंट नहीं करते हैं, इसलिए यह सीधे सवाल का जवाब नहीं दे रहा है, लेकिन मुझे उम्मीद है कि यह मेरी स्थिति में किसी की मदद करेगा।

function findDuplicates($array1,$array2)
{
    $combined = array_merge($array1,$array2);
    $counted = array_count_values($combined);
    $dupes = [];
    $keys = array_keys($counted);
    foreach ($keys as $key)
    {   
        if ($counted[$key] > 1)
        {$dupes[] = $key;}
    }
    sort($dupes);
    return $dupes;
}
$array1 = [1,2,3,4,5];
$array2 = [4,5,6,7,8];
$dupes = findDuplicates($array1,$array2);
print_r($dupes);

आउटपुट:

Array
(
    [0] => 4
    [1] => 5
)

0

एक सरल विधि:

$array = array_values(array_unique($array, SORT_REGULAR));

यह गैर-अद्वितीय मानों की गिनती नहीं करता है, लेकिन सिर्फ उन्हें फ़िल्टर करता है।
m02ph3u5
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.