PHP में किसी सरणी से डुप्लिकेट मान कैसे निकालें


जवाबों:


251

Array_unique () का उपयोग करें ।

उदाहरण:

$array = array(1, 2, 2, 3);
$array = array_unique($array); // Array is now (1, 2, 3)

20
@ इयान -Note that array_unique() is not intended to work on multi dimensional arrays.
पीटर

18
उपरोक्त तत्वों की कुंजियों को संरक्षित करेगा। यदि आप उन्हें फिर से अनुक्रमित करना चाहते हैं, तो इसके अलावा array_values: php.net/manual/en/function.array-values.php
CodeVirtuoso

3
यह मेरे लिए काम नहीं करता कृपया उपयोग करें: $array = array_unique($array, SORT_REGULAR);
iniravpatel

@PeterAjtai: टिप्पणी अनुभाग में प्रकाश डालने के लिए धन्यवाद। इसने मेरे लिए बहुत समय बचाया।
नाना पार्टीकर

29

उपयोग array_values(array_unique($array));

array_unique: अद्वितीय सरणी के लिए array_values: reindexing के लिए


1
+1 array_uniqueकुंजी और मान जोड़े के साथ एक वस्तु देता है और array_valuesएक सरणी के रूप में केवल मान लौटाता है।
नृपसागर

24
//Find duplicates 

$arr = array( 
    'unique', 
    'duplicate', 
    'distinct', 
    'justone', 
    'three3', 
    'duplicate', 
    'three3', 
    'three3', 
    'onlyone' 
);

$unique = array_unique($arr); 
$dupes = array_diff_key( $arr, $unique ); 
    // array( 5=>'duplicate', 6=>'three3' 7=>'three3' )

// count duplicates

array_count_values($dupes); // array( 'duplicate'=>1, 'three3'=>2 )

9

केवल एक चीज जो मेरे लिए काम करती है:

$array = array_unique($array, SORT_REGULAR);

संपादित करें: SORT_REGULARमूल सरणी का एक ही क्रम रखता है।



5

कभी-कभी array_unique()ऐसा नहीं होता है, यदि आप चाहते हैं कि अद्वितीय और डुप्लिकेट आइटम मिलें ...

$unique=array("","A1","","A2","","A1","");
$duplicated=array();

foreach($unique as $k=>$v) {

if( ($kt=array_search($v,$unique))!==false and $k!=$kt )
 { unset($unique[$kt]);  $duplicated[]=$v; }

}

sort($unique); // optional
sort($duplicated); // optional

पर परिणाम

array ( 0 => '', 1 => 'A1', 2 => 'A2', ) /* $unique */

array ( 0 => '', 1 => '', 2 => '', 3 => 'A1', ) /* $duplicated */

3

इस प्रकार के एरे को बनाने के लिए हम इस अंतिम मान को कॉलम या की वैल्यू में अपडेट करेंगे और एरे से यूनीक वैल्यू प्राप्त करेंगे ...

$array = array (1,3,4,2,1,7,4,9,7,5,9);
    $data=array();
    foreach($array as $value ){

        $data[$value]= $value;

    }

    array_keys($data);
    OR
    array_values($data);

2

explode(",", implode(",", array_unique(explode(",", $YOUR_ARRAY))));

यह प्रमुख संघों का ख्याल रखेगा और परिणामी नई सरणी के लिए कुंजियों को क्रमबद्ध करेगा :-)


1
क्या का असर होगा explode("," $YOUR_ARRAY)जब $YOUR_ARRAYहै array("1", "2", "3")?
kiamlaluno 12

@kiamlaluno - :) और उत्तर है: चेतावनी: विस्फोट () पैरामीटर 2 के स्ट्रिंग होने की उम्मीद करता है, लाइन में ... में सरणी दी जाती है ....
जेसी चिशोल्म

@JesseChisholm हां, यह बात थी, लेकिन किसी ने भी कोड पर ध्यान नहीं दिया।
कियमलुनो

2

आपके सरणी के आकार के आधार पर, मैंने पाया है

$array = array_values( array_flip( array_flip( $array ) ) );

array_unique से अधिक तेज हो सकता है।


यहाँ क्या चल रहा है और यह किसी बड़े या छोटे सरणी के साथ तेज़ होगा, इस बारे में अधिक जानकारी।
फाई होरन

दोहरा फ्लिप दोहराए गए मूल्यों को हटाने जा रहा है, क्योंकि एक कुंजी दो बार मौजूद नहीं हो सकती है, अन्यथा यह ओवरराइट हो जाता है। यदि किसी मान को डुप्लिकेट किया गया है और सरणी को फ़्लिप किया गया है, तो अंतिम घटना (मुझे लगता है) कुंजी के लिए मूल्य होगा।
गोल्डेंटोआ

PHP 7 में, मैंने देखा है कि एक से अधिक बार अनपेक्षित रूप से सरणी तत्वों को फिर से चलाने के लिए एक बहुआयामी सरणी को फ़्लिप किया जा सकता है।
जोश हबदास

1

यह एक शानदार तरीका है। यह सुनिश्चित करना चाहते हैं कि इसका उत्पादन फिर से एक सरणी है। अब आप केवल अंतिम अनन्य मान दिखा रहे हैं।

इसे इस्तेमाल करे:

$arrDuplicate = array ("","",1,3,"",5);

foreach (array_unique($arrDuplicate) as $v){
  if($v != "") { $arrRemoved[] = $v; }
}
print_r ($arrRemoved);

1
    if (@!in_array($classified->category,$arr)){        
                                    $arr[] = $classified->category;
                                 ?>

            <?php } endwhile; wp_reset_query(); ?>

पहली बार एरे में मूल्य की जाँच करें और उसी मान को अनदेखा करें


1

PHP में एक साहचर्य सरणी से डुप्लिकेट मान निकालें।

$arrDup = Array ('0' => 'aaa-aaa' , 'SKU' => 'aaa-aaa' , '1' => '12/1/1' , 'date' => '12/1/1' , '2' => '1.15' , 'cost' => '1.15' );

foreach($arrDup as $k =>  $v){
  if(!( isset ($hold[$v])))
      $hold[$v]=1;
  else
      unset($arrDup[$k]);
}

ऐरे ([०] => आ-आ [१] => १२/१/१ [२] => १.१५)


1

इन्हें करने के कई तरीके हो सकते हैं, जो इस प्रकार हैं

//first method
$filter = array_map("unserialize", array_unique(array_map("serialize", $arr)));

//second method
$array = array_unique($arr, SORT_REGULAR);

1

यदि आपको प्रदर्शन में चिंता है और सरल सरणी है, तो उपयोग करें:

array_keys(array_flip($array));

यह array_unique से कई गुना तेज है।


1
$a = array(1, 2, 3, 4); 
$b = array(1, 6, 5, 2, 9); 
$c = array_merge($a, $b);
$unique = array_keys(array_flip($c));
print_r($unique);

इसे प्राप्त करने का सबसे तेज़ तरीका है PHP_ 1 में निर्मित array_flip फ़ंक्शन का उपयोग करना। array_flip सरणी मानों को उनकी कुंजियों के साथ स्वैप करेंगे और चूंकि एक सरणी में डुप्लिकेट कुंजियाँ नहीं हो सकती हैं, इसलिए आप कुंजियों के अनूठे सेट के साथ समाप्त हो जाएंगे जो मूल सरणी के मूल्यों के अनुरूप हैं। इन कुंजियों को मानों के रूप में प्राप्त करने के लिए, आप अपने विशिष्ट मूल्यों को पुनः प्राप्त करने के लिए array_keys फ़ंक्शन का उपयोग कर सकते हैं। Array_flip और array_keys दोनों ही सबसे खराब स्थिति वाले O (n) कार्य हैं, जबकि array_unique में O (n log (n)) का सबसे खराब मामला है। [2]
पावन कुमार

1
कृपया अपने उत्तर में कुछ और स्पष्टीकरण जोड़ें (टिप्पणी अनुभाग पर नहीं!)। दिए गए कोड एकल सरणी से डुप्लिकेट मान कैसे निकालते हैं ? उसके लिए आपको दो सरणियों की आवश्यकता क्यों है?
निको हेस

StackOverflow में आपका स्वागत है! मैं देखता हूं कि आपने अपने उत्तर की टिप्पणियों में कुछ स्पष्टीकरण जोड़ दिए हैं, यह उपयोगी होगा यदि आप इस जानकारी को अपने उत्तर के हिस्से के रूप में जोड़ते हैं।
n4m31ess_c0d3r

पहले से लंबे समय से मौजूद उत्तर ( stackoverflow.com/a/52591730/2109067 ) पर एक टिप्पणी के रूप में उस टिप्पणी को जोड़ने के लिए अधिक उचित लगता है ।
अंखेज

आप डुप्लिकेट तत्वों के साथ एकल सरणी का उपयोग कर सकते हैं। मुझे दो सरणियों से एक में मान प्राप्त करने की समस्या थी, फिर डुप्लिकेट को हटा दें।
पावन कुमार

0
$arrDuplicate = array ("","",1,3,"",5);
 foreach(array_unique($arrDuplicate) as $v){
  if($v != "" ){$arrRemoved = $v;  }}
print_r($arrRemoved);

1
यह वास्तव में कुछ भी नहीं समझाता है, और यह "चालाक" नहीं लगता है।
स्वेन

आप हमेशा समझा सकते हैं कि अपनी पोस्ट को संपादित करके, अपने उत्तर के अंत में "संपादित करें" लिंक पर क्लिक करें। मेरा यह भी सुझाव है कि आपके पास अक्सर पूछे जाने वाले प्रश्न: stackoverflow.com/faq
ForceMagic

0
function arrayUnique($myArray)
{
    $newArray = Array();
    if (is_array($myArray))
    {
        foreach($myArray as $key=>$val)
        {
            if (is_array($val))
            {
                $val2 = arrayUnique($val);
            }
            else
            {
                $val2 = $val;
                $newArray=array_unique($myArray);
                $newArray=deleteEmpty($newArray);
                break;
            }
            if (!empty($val2))
            {
                $newArray[$key] = $val2;
            }
        }
    }
    return ($newArray);
}

function deleteEmpty($myArray)
{
    $retArray= Array();
    foreach($myArray as $key=>$val)
    {
        if (($key<>"") && ($val<>""))
        {
            $retArray[$key] = $val;
        }
    }
    return $retArray;
}

0

इस छोटे और मीठे कोड की कोशिश करें -

$array = array (1,4,2,1,7,4,9,7,5,9);
$unique = array();

foreach($array as $v){
  isset($k[$v]) || ($k[$v]=1) && $unique[] = $v;
  }

var_dump($unique);

आउटपुट -

array(6) {
  [0]=>
  int(1)
  [1]=>
  int(4)
  [2]=>
  int(2)
  [3]=>
  int(7)
  [4]=>
  int(9)
  [5]=>
  int(5)
}

1
नियंत्रण प्रवाह के लिए बूलियन ऑपरेटरों का दुरुपयोग इस तरह से भ्रमित करने की जरूरत नहीं है। बस उपयोग करें if
मार्क ऐमी

0
<?php
$arr1 = [1,1,2,3,4,5,6,3,1,3,5,3,20];    
print_r(arr_unique($arr1));


function arr_unique($arr) {
  sort($arr);
  $curr = $arr[0];
  $uni_arr[] = $arr[0];
  for($i=0; $i<count($arr);$i++){
      if($curr != $arr[$i]) {
        $uni_arr[] = $arr[$i];
        $curr = $arr[$i];
      }
  }
  return $uni_arr;
}

लूप में गिनती ($
गिरफ्तारी

0

यहाँ मैंने एक दूसरी खाली सरणी बनाई है और forपहले सरणी के साथ लूप का उपयोग किया है जो डुप्लिकेट कर रहा है। यह पहली सरणी की गिनती के रूप में कई बार चलेगा। फिर पहले सरणी के साथ सरणी की स्थिति के साथ तुलना की और मिलान किया कि इसका यह आइटम पहले से है या उपयोग करके नहीं in_array। यदि नहीं, तो यह उस आइटम को दूसरी सरणी में जोड़ देगा array_push

$a = array(1,2,3,1,3,4,5);
$count = count($a);
$b = [];
for($i=0; $i<$count; $i++){
    if(!in_array($a[$i], $b)){
        array_push($b, $a[$i]);
    }
}
print_r ($b);

क्या आप उस कोड के बारे में कुछ स्पष्टीकरण साझा कर सकते हैं? उदाहरण के लिए, आप foreachलूप का उपयोग क्यों नहीं करते हैं ?
निको हसे

यह करने का एक प्रकार है और मैंने foreachलूप के लिए बहुत आरामदायक होने के कारण उपयोग नहीं किया । बस।
अलादीन बनवाल

फिर भी, आपको कोड के साथ कुछ स्पष्टीकरण साझा करना चाहिए। एसओ पर इस तरह के जवाब पोस्ट करना अच्छी शैली नहीं है: ओपी के साथ आने वाली एक ही समस्या वाले लोग, और उन्हें यह समझने में सक्षम होना चाहिए कि आपका कोड समस्या को कैसे हल करता है, ताकि वे इससे सीख सकें और अपनी जरूरतों को अपना सकें
निको हसे

0

यह फ़ंक्शन के माध्यम से किया जा सकता है मैंने तीन फ़ंक्शन डुप्लिकेट को उन मानों को रिटर्न किया है जो सरणी में डुप्लिकेट हैं।

दूसरा फ़ंक्शन सिंगल रिटर्न केवल उन मानों को जो एकल माध्य को सरणी में दोहराया नहीं जाता है और तीसरा और पूर्ण फ़ंक्शन सभी मानों को लौटाता है लेकिन डुप्लिकेट नहीं किया जाता है यदि कोई मूल्य डुप्लिकेट है तो इसे एकल में बदल दें;

function duplicate($arr) {
    $duplicate;
    $count = array_count_values($arr);
    foreach($arr as $key => $value) {
        if ($count[$value] > 1) {
            $duplicate[$value] = $value;
        }
    }
    return $duplicate;
}
function single($arr) {
    $single;
    $count = array_count_values($arr);
    foreach($arr as $key => $value) {
        if ($count[$value] == 1) {
            $single[$value] = $value;
        }
    }
    return $single;
}
function full($arr, $arry) {
    $full = $arr + $arry;
    sort($full);
    return $full;
}

0
$array = array("a" => "moon", "star", "b" => "moon", "star", "sky");

// Deleting the duplicate items
$result = array_unique($array);
print_r($result);

रेफरी: डेमो


1
मूल उत्तर के 11 साल बाद array_unique के साथ इस प्रश्न का उत्तर देने की क्या बात है?
डायलन कास

0

Array_unique () फ़ंक्शन के लिए एक विकल्प ।।

जानवर बल एल्गोरिथ्म का उपयोग करना

// [1] डुप्लिकेट आइटम के साथ यह हमारी सरणी है

$ मैच = ["जॉर्ज", "मेल्विन", "चेल्सी", "मेल्विन", "जॉर्ज", "स्मिथ"];

// [२] बिना किसी डुप्लिकेट आइटम के नए सरणी के लिए कंटेनर

$ गिरफ्तारी = [];

// [3] डुप्लिकेट किए गए सरणी की लंबाई प्राप्त करें और इसे लूप के लिए उपयोग किए जाने वाले var लेन पर सेट करें

$ लेन = गिनती ($ मैच);

// [४] यदि मिलान कुंजी ($ i) करंट लूप Iteration में उपलब्ध नहीं है // [4] सरणी $ गिरफ्तार तो मैचों के वर्तमान पुनरावृत्ति कुंजी मूल्य को धक्का [$ मैं] // [४] एरे गिरफ्तार करने के लिए।

$ मैं, ($ i = 0 के लिए if(array_search($matches[$i], $arr) === false){ array_push($arr,$matches[$i]); } } //print the array $arr. print_r($arr); //Result: Array ( [0] => jorge [1] => melvin [2] => chelsy [3] => smith )


-2

मैंने बिना किसी फ़ंक्शन का उपयोग किए यह किया है।

$arr = array("1", "2", "3", "4", "5", "4", "2", "1");

$len = count($arr);
for ($i = 0; $i < $len; $i++) {
  $temp = $arr[$i];
  $j = $i;
  for ($k = 0; $k < $len; $k++) {
    if ($k != $j) {
      if ($temp == $arr[$k]) {
        echo $temp."<br>";
        $arr[$k]=" ";
      }
    }
  }
}

for ($i = 0; $i < $len; $i++) {
  echo $arr[$i] . " <br><br>";
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.