PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : doppelte array elemente löschen...


|Coding
19.01.2005, 18:59:44
hi,

also ich habe folgendes problem:

ich habe irgendwie keine idee, wie ich ein indiziertes array wie dieses:

$ar1 = array(1,1,2,3,3,4,4,4,4,4,5,9,6,1,4,9,9,9,3,3);

zu so einem indizierten array formatieren/errechnen kann:

$ar2 = array(2,1,2,5,1,1,1,1,1,3,2);

ich möchte also die doppelten array elemente, welche sich im array-index direkt nebeneinander befinden, zusammen zählen...

bildlich müsste man sich das so vorstellen:

$ar2 = array( 2, 1, 2, 5, 1, 1, 1, 1, 1, 3, 2);
| | | | | | | | | | |
$ar1 = array(1,--+1 | | | | | | | | | |
1,---1 | | | | | | | | | |
2,------1 | | | | | | | | |
3,--------+1 | | | | | | | |
3,---------1 | | | | | | | |
4,-----------+1 | | | | | | |
4,-----------+1 | | | | | | |
4,-----------+1 | | | | | | |
4,-----------+1 | | | | | | |
4,------------1 | | | | | | |
5,---------------1 | | | | | |
9,------------------1 | | | | |
6,---------------------1 | | | |
1,------------------------1 | | |
4,---------------------------1 | |
9,-----------------------------+1 |
9,-----------------------------+1 |
9,------------------------------1 |
3,--------------------------------+1
3,---------------------------------1
);


hat jemand 'ne idee wie man das lösen könnte? ich krieg noch graue haare dran...

|Coding
19.01.2005, 20:37:16
hi,

ich habe es doch noch geschaft, ist eigentlich tierisch simpel. hatte wohl 'n bett vor'm kopf. was ne pause nicht alles bewirken kann :-)

die lösung:


<?PHP
$array = array(1,1,2,3,3,4,4,4,4,4,5,9,6,1,4,9,9,9,3,3);
$summe = 1;
$sarray = array();

for($n = 0; $n < count($array); $n++){
if($array[$n] == $array[$n+1]) $summe++;
else{
if($summe > 1){
$sarray[] = $summe;
$summe = 1; //buffer reset
}else $sarray[] = 1;
}
}

print_r($sarray);
?>

c4
20.01.2005, 08:52:20
Da ich nicht kapiert habe, was Du hier summierst, mein ich-wollte-es-einfach-mal-versuchen-Versuch: <?php
$array = array(1,1,2,3,3,4,4,4,4,4,5,9,6,1,4,9,9,9,3,3);
print_r($array);

for ($i=0; $i<count($array); $i++) {
if (!isset($array[$i+1])) {
break;
}

while ($array[$i]==$array[$i+1]) {
array_splice($array, $i, 1);
if (!isset($array[$i]) || !isset($array[$i+1])) {
break;
}
}
}

print_r($array);
?>

|Coding
20.01.2005, 17:57:00
hi carsten,

dein 'ich-wollte-es-einfach-mal-versuchen-Versuch' haut net hin.
bei deinem versuch passiert das:

input: array(1,1,2,3,3,4,4,4,4,4,5,9,6,1,4,9,9,9,3,3)
output: array(1,2,3,4,5,9,6,1,4,9,3)

bei meinem code:

input: array(1,1,2,3,3,4,4,4,4,4,5,9,6,1,4,9,9,9,3,3)
output: array(2,1,2,5,1,1,1,1,1,3,2)


du gibt das array einfach nur ohne doppelte eintäge aus. doch ich brauchte nen weg, um die doppelten einträge zu zählen, aber nur die die neben einader stehen.

aus: 1 2 3
wird: 1 1 1

aus 1 22 3
wird: 1 2 1

aus: 11 2 333 1
wird: 2 1 3 1

verstehst du jetzt was ich erreichen wollte?

c4
20.01.2005, 17:58:21
Ach, den Part mit dem Zählen habe ich ganz überlesen. Jetzt weiß ich auch, was Du mit der Summe willst... :)

|Coding
20.01.2005, 18:04:33
btw:

ich hab meinen code noch mal überarbeitet. es war ein sinnloser teil drin (was hab ich mir nur dabei gedacht :D)


<?PHP
$array = array(1,1,2,3,3,4,4,4,4,4,5,9,6,1,4,9,9,9,3,3);
$summe = 1;
$sarray = array();

for($n = 0; $n < count($array); $n++){
if($array[$n] == $array[$n+1]) $summe++;
else{
$sarray[] = $summe;
$summe = 1; //buffer reset
}
}

print_r($sarray);
?>


ach so, ich dachte ich hätte mich schwierig ausgedrückt und wenn du es schon nicht verstanden hättes, wer sollte es denn dann verstehen :P

c4
20.01.2005, 18:06:26
Original geschrieben von |Coding
ach so, ich dachte ich hätte mich schwierig ausgedrückt und wenn du es schon nicht verstanden hättes, wer sollte es denn dann verstehen :P Schleim nicht rum, mach lieber endlich ein Update des Forums. ;)

Na ja, eigentlich gibt's gar keinen Grund ein Update durchzuführen. Ich, der kleine Purist... Aber bevor Du hier weiter Reden schwingst! ;)

Scheisse, schon wieder zwei Smilies in einem Beitrag!

|Coding
20.01.2005, 18:16:30
eh! hetz mit nicht, ein alter mann ist kein d-zug :-)