Zählen und Anzeigen von Vorkommen eindeutiger Werte in einem Array

Lesezeit: 2 Minuten

Benutzeravatar von mikey_w
mikey_w

Ich arbeite mit einem eindimensionalen Array in PHP. Ich möchte das Vorhandensein doppelter Werte erkennen, dann die Anzahl der doppelten Werte zählen und die Ergebnisse ausgeben. Zum Beispiel das folgende Array gegeben:

$array = [
    'apple',
    'orange',
    'pear',
    'banana',
    'apple',
    'pear',
    'kiwi',
    'kiwi',
    'kiwi'
];

Ich möchte drucken:

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

Irgendwelche Ratschläge, wie man dieses Problem angeht?

Benutzeravatar von Silfverstrom
Silberstrom

Sie können verwenden array_count_values Funktion

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

print_r(array_count_values($array));

wird ausgegeben

Array
(
   [apple] => 2
   [orange] => 1
   [pear] => 2
   etc...
)

  • Diese Lösung deckt keine Nicht-Integer- und Nicht-String-Werte ab und erzeugt schließlich Nebeneffekte.

    – Codekandis

    29. Mai 2018 um 12:18 Uhr

if(count(array_unique($array))<count($array))
{
    // Array has duplicates
}
else
{
    // Array does not have duplicates
}

  • “…zählen Sie dann die Anzahl der doppelten Werte und geben Sie die Ergebnisse aus.”

    – Showdev

    9. März 2018 um 1:31 Uhr

  • Diese Lösung deckt keine Nicht-Integer- und Nicht-String-Werte ab und erzeugt schließlich Nebeneffekte. Verwenden array_unique($array, SORT_REGULAR) zwingt PHP, Elemente normal zu prüfen, ohne den Typ zu ändern, aber es ist ein loser Vergleich. So werden verschiedene Instanzen einer Klasse mit gleichem Inhalt eindeutig.

    – Codekandis

    29. Mai 2018 um 12:33 Uhr


Benutzeravatar von Anton Maryanov
Anton Maryanov

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

Ergebnis: (Demo)

array (
  4 => 'apple',
  5 => 'pear',
  7 => 'kiwi',
  8 => 'kiwi',
)

  • Dies ist die einzige Antwort, die nur die doppelten Werte zurückgibt.

    – Rotzarf

    11. Januar 2019 um 18:45 Uhr

  • Erweitert, um nur eine Liste doppelter Werte zu geben (was ich brauchte): return array_values(array_unique(array_diff_key($a, array_unique($a))));

    – Herbst Leonard

    15. Februar 2019 um 19:42 Uhr

Sie könnten versuchen, dieses Array in ein assoziatives Array mit den Früchten als Schlüsseln und der Anzahl der Vorkommen als Werte umzuwandeln. Etwas langatmig, aber es sieht so aus:

$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 />";
}

Gebrauch loszuwerden array_unique(). Um festzustellen, ob es einen Nutzen hat count(array_unique()) und vergleiche mit count($array).

Vielleicht so etwas (ungetesteter Code, sollte Ihnen aber eine Idee geben)?

$new = array();

foreach ($array as $value)
{
    if (isset($new[$value]))
        $new[$value]++;
    else
        $new[$value] = 1;
}

Dann erhalten Sie ein neues Array mit den Werten als Schlüssel und ihr Wert ist die Anzahl der Male, die sie im ursprünglichen Array vorhanden waren.

Benutzeravatar von Anton Gogolev
Anton Gogolev

Füllen Sie sie in a map (Pseudocode)

map[string -> int] $m
foreach($word in $array)
{
    if(!$m.contains($word))
        $m[$word] = 0;

    $m[$word] += 1;
}

1449430cookie-checkZählen und Anzeigen von Vorkommen eindeutiger Werte in einem Array

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy