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


115

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

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

আমি মুদ্রণ করতে চাই:

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

এই সমস্যাটির কাছে কীভাবে পরামর্শ করবেন?

ধন্যবাদ।

মাইক

উত্তর:


239

আপনি অ্যারে_কাউন্ট_মূল্য ফাংশনটি ব্যবহার করতে পারেন

$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)প্রকারটি পরিবর্তন না করে পিএইচপিকে উপাদানগুলি সাধারণত চেক করতে বাধ্য করে তবে এটি একটি স্বল্প তুলনা। সুতরাং একই বিষয়বস্তু সহ এক শ্রেণির বিভিন্ন উদাহরণ অদৃশ্য হয়ে যাবে।
কোডক্যান্ডিস

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

1
এটি কেবলমাত্র সদৃশ মানগুলিই দেয়।
রেডজার্ফ

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
উত্তম উত্তর, তবে পিএইচপি-র একটি বিদ্যমান ফাংশন রয়েছে যা কেবল এটি করে: array_count_values
নভের

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

তারপরে আপনি কীগুলি হিসাবে মানগুলির সাথে একটি নতুন অ্যারে পাবেন এবং তাদের মানটি মূল অ্যারেটিতে বিদ্যমান তার সংখ্যা।


উত্তম উত্তর, তবে পিএইচপি-র একটি বিদ্যমান ফাংশন রয়েছে যা কেবল এটি করে: array_count_values
নভের

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