Алгоритм в PHP для подсчета и отображения переменных - PullRequest
0 голосов
/ 29 декабря 2011

Я не могу найти способ чтения переменных в URL, в векторе или в текстовой форме, чтобы он возвращал только повторяющееся значение. В случае, если это только одно значение, мне нужно отобразить его, или если есть все разные значения, мне нужно отобразить их все.

Например, если у меня есть 1,2,3,1,4, я бы хотел, чтобы он отображал 1, а если у меня есть 1,2,3,4, чтобы отобразить их все.

$values = $_GET['intrebare'];
$count = count($values);

foreach($values as $val =>$array) 
{
    //echo $val . '<br/>';
    //var_dump($array);

    if(is_array($array))
    {
        var_dump($array);
    }
    else
    {
        echo $val;
    }
}

Ответы [ 2 ]

1 голос
/ 04 января 2012

Использование array_count_values - это самый простой способ, но в случае, если вам нужно понять, как выполнить то, что вы ищете, вот подробная версия.

$input = array(1, 2, 3, 4, 1);
$unique = array_unique($input);

// If $input and $unique are different in length, 
// there is one or more repeating values
if (count($input) !== count($unique)) {
    $repeat = array();

    // Sort values in order to have equal values next to each other
    sort($input);

    for ($i = 1; $i < count($input) - 1; $i++) {
        // If two adjacent numbers are equal, that's a repeating number.
        // Add that to the pile of repeated input, disregarding (at this stage)
        // whether it is there already for simplicity.
        if ($input[$i] === $input[$i - 1]) {
            $repeat[] = $input[$i];
        }
    }

    // Finally filter out any duplicates from the repeated values
    $repeat = array_unique($repeat);

    echo implode(', ', $repeat);
} else {
    // All unique, display all
    echo implode(', ', $input);
}

Краткий однострочный-иная версия будет:

$input = array(1, 2, 3, 4, 1);
$repeat = array_keys(
    array_filter(
        array_count_values($input), 
        function ($freq) { return $freq > 1; }
    )
);

echo count($repeat) > 0 
        ? implode(', ', $repeat)
        : implode(', ', $input);
1 голос
/ 29 декабря 2011

вы можете использовать array_unique в вашем входном массиве, чтобы увидеть, нет ли двойников.Если массив после array_unique такой же большой, как и раньше, вы должны вывести все значения.

Из того, что я понимаю, если массив не содержит все уникальные значения, вы хотите напечатать все, что происходит несколько раз.Если вы хотите напечатать значения, которые встречаются более одного раза, вы можете сначала проверить с помощью array_count_values ​​, какие значения встречаются более одного раза, и распечатать их.*

...