পিএইচপি-তে কোনও অ্যারে থেকে সদৃশ মানগুলি কীভাবে সরিয়ে ফেলা যায়


155

আমি কীভাবে পিএইচপি-তে কোনও অ্যারে থেকে সদৃশ মানগুলি সরিয়ে ফেলতে পারি?

উত্তর:


250

অ্যারে_উনিক () ব্যবহার করুন ।

উদাহরণ:

$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
উপরের উপাদানগুলির কীগুলি সংরক্ষণ করবে। আপনি যদি তাদের পুনরায় সূচিবদ্ধ করতে চান তবে অতিরিক্তভাবে অ্যারে_ভ্যালুগুলিও প্রয়োগ করুন: php.net/manual/en/function.array-values.php
CodeVirtuoso

3
এটি আমার জন্য দয়া করে ব্যবহার করুন না: $array = array_unique($array, SORT_REGULAR);
ইনিরাভপেটেল

@ পিটারআজতাই: মন্তব্য বিভাগে হাইলাইট করার জন্য আপনাকে ধন্যবাদ। এটি আমার জন্য অনেক সময় সাশ্রয় করেছিল।
নানা পার্টিকার

29

ব্যবহার array_values(array_unique($array));

array_unique: অনন্য অ্যারের array_valuesজন্য: পুনর্নির্মাণের জন্য


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")?
কিমলালুনো

@ কিয়ামলালানো - :) এবং উত্তরটি হ'ল: সতর্কতা: বিস্ফোরিত হওয়া (2) প্যারামিটারটি স্ট্রিং হবে বলে প্রত্যাশা করেছে, লাইনটিতে অ্যারে দেওয়া হবে ....
জেসি চিশলম

@ জেসি চিসলম হ্যাঁ, এটিই মূল বিষয় ছিল, তবে কেউ কোডটি লক্ষ্য করে দেখেনি, স্পষ্টতই।
কিমলালুনো

2

আপনার অ্যারের আকারের উপর নির্ভর করে আমি খুঁজে পেয়েছি

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

অ্যারে_উনিকের চেয়ে দ্রুত হতে পারে।


এখানে কী চলছে এবং আরও বড় বা আরও ছোট অ্যারের সাথে এটি আরও দ্রুত হবে এর সম্পর্কিত আরও কোনও তথ্য।
ফাই হোরান

ডাবল ফ্লিপ সদৃশ মানগুলি সরিয়ে ফেলবে, কারণ একটি চাবি দু'বারের অস্তিত্ব রাখতে পারে না, অন্যথায় এটি ওভাররাইট হয়ে যায়। যদি কোনও মান সদৃশ হয় এবং অ্যারেটি উল্টানো হয় তবে শেষ ঘটনাটি (আমি ধরে নিই) কী এর মান হবে।
গোল্ডেনোয়া 11

পিএইচপি 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

পিএইচপি-তে কোনও সহযোগী অ্যারে থেকে সদৃশ মানগুলি সরান।

$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]);
}

অ্যারে ([0] => এএএএএ [1] => 12/1/1 [2] => 1.15)


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));

এটি অ্যারে_উনিকের থেকে অনেকগুণ দ্রুত।


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);

এটি অর্জনের দ্রুততম উপায় হ'ল পিএইচপি [1] এ অন্তর্নির্মিত অ্যারে_ফ্লিপ ফাংশনটি ব্যবহার করা। অ্যারে_ফ্লিপ তাদের কীগুলির সাথে অ্যারের মানগুলিকে অদলবদল করবে এবং যেহেতু একটি অ্যারেতে নকল কী থাকতে পারে না আপনি কীগুলির একটি অনন্য সেট যা মূল অ্যারের মানের সাথে মিলিয়ে শেষ করবেন। এই কীগুলি মান হিসাবে পুনরুদ্ধার করতে আপনি আপনার অনন্য মানগুলি পুনরুদ্ধার করতে অ্যারে_কিগুলি ফাংশনটি ব্যবহার করতে পারেন। অ্যারে_ফ্লিপ এবং অ্যারে_কি উভয়ই সবচেয়ে খারাপ ক্ষেত্রে ও (এন) ফাংশন এবং অ্যারে_উনিকের ও (এন লগ (এন)) এর সবচেয়ে খারাপ পরিস্থিতি রয়েছে [[2]
পবন কুমার

1
আপনার উত্তরে দয়া করে আরও কিছু ব্যাখ্যা যুক্ত করুন (মন্তব্য বিভাগে নয়!)। প্রদত্ত কোডটি কীভাবে একটি একক অ্যারে থেকে সদৃশ মানগুলি সরিয়ে ফেলবে ? তার জন্য আপনার কেন দুটি অ্যারে দরকার?
নিকো হাজেস

স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম! আমি দেখতে পাচ্ছি যে আপনি নিজের উত্তরের মন্তব্যে কিছু ব্যাখ্যা যুক্ত করেছেন, আপনি যদি নিজের উত্তরের অংশ হিসাবে এই তথ্য যুক্ত করেন তবে এটি সহায়ক হবে।
n4m31ess_c0d3r

ইতিমধ্যে দীর্ঘ-বিদ্যমান উত্তরের ( stackoverflow.com/a/52591730/2109067 ) এ মন্তব্য হিসাবে মন্তব্যটি যুক্ত করা আরও যুক্তিযুক্ত বলে মনে হচ্ছে ।
ankhzet

আপনি সদৃশ উপাদানগুলির সাথে একক অ্যারে ব্যবহার করতে পারেন। দু'টি অ্যারে থেকে মানগুলিকে একের মধ্যে নিয়ে যাওয়ার পরে আমার নকলগুলি মুছে ফেলার সমস্যা হয়েছিল।
পবন কুমার

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;
}

লুপে গণনা (
r আরআর

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 বছর পরে অ্যারে_উনিকের সাথে দেওয়ার কী আছে?
ডিলান কাস

0

অ্যারে_উনিক () ফাংশনের জন্য একটি বিকল্প ..

ব্রুট ফোর্স অ্যালগোরিদম ব্যবহার করে

// [1] সদৃশ আইটেম সহ এটি আমাদের অ্যারে

$ ম্যাচস = ["জর্জি", "মেলভিন", "চেলসি", "মেলভিন", "জর্জি", "স্মিথ"];

// [2] কোনও অনুলিপি আইটেম ছাড়াই নতুন অ্যারের জন্য ধারক

$ আরআর = [];

// [3] সদৃশ অ্যারের দৈর্ঘ্য পান এবং লুপের জন্য ব্যবহারের জন্য ভ্যার লেনে সেট করুন

$ লেন = গণনা ($ ম্যাচ);

// [4] মিল থাকলে অ্যারে কী ($ i) বর্তমান লুপ আইট্রেটেডটি পাওয়া যায় না // [4] অ্যারে $ আরার তার পরে মিলগুলির বর্তমান পুনরাবৃত্তির মূল্যের মানটি টিপুন [$ i] // [4] অ্যারে অ্যারে।

$ I এর; ($ 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>";
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.