简体   繁体   中英

Multiple Array values (some value same) how to get only 2 values same

Multiple values ​​in a single array (some value similar) how to get One of them is to get the array that is similar values minimum 1 and maximum 2 times repeat

for Example This array -

$array_value = array('ab','ab','cd','de','ab','cd','ab','de','xy');
foreach($array_value as $value){


}

I want output - ab, ab,cd, cd, de, xy

I think your output shuold have two de not one?

Anyway here is the code with explanations in comments:

<?php

$array_value = array('ab','ab','cd','de','ab','cd','ab','de','xy');

$arr_count = []; //we use this array to keep track of how many times we've added this
$new_arr = []; //we add elements to this array, or not.

foreach($array_value as $value){
    // we've added it before
    if (isset($arr_count[$value])) {
        // we only add it again one more time, no more.
        if ($arr_count[$value] < 2) {
            $arr_count[$value]++;
            $new_arr[] = $value;
        }
    }
    // we haven't added this before
    else {
        $arr_count[$value] = 1;
        $new_arr[] = $value;
    }
}

sort($new_arr); 

print_r($new_arr); 
/*
(
    [0] => ab
    [1] => ab
    [2] => cd
    [3] => cd
    [4] => de
    [5] => de
    [6] => xy
) */

PHP Demo

array_count_values return the repetition of specific value in array. So, you can use it to simplify the code and quickly implement it.

$array_value = array('ab','ab','cd','de','ab','cd','ab','de','xy');
// Get count of every value in array
$array_count_values = array_count_values($array_value);
$result_array = array();
foreach ($array_count_values as $key => $value) {
    // Get $value as number of repetition of value and $key as value
    if($value > 2) {
        $value = 2;
        array_push($result_array, $key);
        array_push($result_array, $key);
    } else {
        for ($i=0; $i < $value; $i++) { 
            array_push($result_array, $key);
        }
    }
}
print_r($result_array);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM