Ich habe ein Array mit doppelten Werten.

Ich möchte alle Elemente drucken, aber auch für doppelte Werte möchte ich auch eine Nummer drucken.

So was:

$arr = array('sara','jorj','sara','sara','jorj','eli','ana')

foreach($arr as $name)
{
   echo $name;
}

Wie kann dieses Ergebnis gedruckt werden:

sara
jorj
sara-2
sara-3
jorj-2
eli
ana
3
partiz 25 Dez. 2015 im 05:53

2 Antworten

Beste Antwort

Das sollte für Sie funktionieren:

Hier verwende ich zuerst array_slice(), um ein Array von allen zu erhalten Elemente, die vor dem aktuellen Element der Iteration stehen, z

iteration value   |  sliced array
-----------------------------------
     sara         |       []
     jorj         |     [sara]

Dann verwende ich dieses Array mit array_filter(), um es nur zu behalten Die Werte mit sind gleich dem aktuellen Iterationswert, sodass ich feststellen kann, wie viele der gleichen Werte sich vor dem aktuellen Wert im Array befinden.

Jetzt muss ich nur noch count() angeben, wie viele es gibt und ob sind mehr als 1 wir drucken es auch in der Ausgabe.

Code:

$arr = array('sara','jorj','sara','sara','jorj','eli','ana');

foreach($arr as $key => $name) {
    $count = count(array_filter(array_slice($arr, 0, $key), function($v)use($name){
       return $v == $name;
    })) + 1;

   echo $name . ($count > 1 ? " - $count" : "") . PHP_EOL;
}

Ausgabe:

sara
jorj
sara - 2
sara - 3
jorj - 2
eli
ana
8
Rizier123 25 Dez. 2015 im 03:04

Vielleicht bin ich etwas spät dran, aber hier ist mein Versuch

$arr = array('sara','jorj','sara','sara','jorj','eli','ana');
$tmp = array();

foreach ($arr as $value) {
    if (!isset($tmp[$value]) ) {
        // if $value is not found in tmp array
        // initialize the value in tmp array and set to 1
        $tmp[$value] = 1;
        echo $value;
    }
    else {
        // found the value in tmp array
        // add 1 to the value in tmp array
        // output its current total count of this value
        $tmp[$value] += 1;
        echo "$value-", $tmp[$value]; 
    }
    echo "<br>";
}

Ausgabe:

sara
jorj
sara-2
sara-3
jorj-2
eli
ana

Dies hat tatsächlich die gleiche Ausgabe von array_count_values, ist aber in Teile seiner Form zerlegt ... denke ich

2
Andrew 25 Dez. 2015 im 17:55