Willkommen in der Webstatt
User-1 am 20.07.06 12:09

Hallo.
Ich habe einen array mit 7 keys von 0-6. Jedem Key ist eine beliebige Zahlen von 2-14 zugeordnet. Aber die Zahlen können auch unter verschiedenen Keys mehrfach vorkommen.

z.B.
$arr[] = "4";
$arr[] = "14";
$arr[] = "9";
$arr[] = "4";
$arr[] = "6";
$arr[] = "14";
$arr[] = "12";


Jetzt muss ich testen ob es in diesem array 5 aufeinander folgene values gibt. Also z.B. 2, 3, 4, 5, 6 oder 10, 11, 12, 13, 14. Das nennt man ja auch eine Strasse^^.
Hab das nur sehr schwer und umständlich hinbekommen, aber es muss doch auch einfacher gehen.

Ich bedank mich jetzt schonmal!

netcup.de Warum gibt es hier Werbung?
User-2 am 20.07.06 12:26

am besten du sortierst es nach der Größe erstmal und dann prüfst du, ob das nächste jeweils um $i+1 größer ist

User-1 am 20.07.06 12:34

so änlich ist auch meine variante.

User-3 am 20.07.06 13:51

Sehr seltsame Notation.. aber wurscht.

xyz-161, vor dem Vergleich sollten noch doppelte Einträge entfernt werden ;)

<?php
$k = array(1, 3, 5, 6, 6, 7, 7, 8, 9, 10);
$_k = array_unique($k);
sort($_k);
$n = 1;
foreach ($_k as $i => $c) {
if ($c + 1 == $_k[$i + 1])
$n++;
else
$n = 1;
if ($n == 5) {
print_r(array_slice($_k, $i - 4, 5));
break;
}
}
?>

User-2 am 20.07.06 13:54

nicht unbedingt...du kannst sie auch drinnen lassen ;) wenn man es anders coded...

User-1 am 20.07.06 14:00

Quote
Original von xyz-161
nicht unbedingt...du kannst sie auch drinnen lassen ;) wenn man es anders coded...


wie meinste das?

Die lösung von xyz-145 ist gut. vielen dank!

Wozu braucht man $_? Was bezweckt der _?

User-3 am 20.07.06 14:06

> Was bezweckt der _?

Der Unterstrich unterscheidet nur das Original-Array von der Kopie.

User-1 am 20.07.06 14:14

ok, hast aber bei dir ein denkfehler drin.

wenn n == 4 ist und nicht 5 ist schon ne strasse da, da ja n bei 0 anfängt und zwischen den 5 Zahlen 4 zwischenräume sind. Aber sonst ist der code gut!

User-3 am 20.07.06 14:23

> wenn n == 4 ist und nicht 5 ist schon ne strasse da

Ah danke, schnell ausbessern ;)

User-1 am 20.07.06 14:26

Wenn man aber andere Zahlen in den Array einsetzt, dann spinnt es ein wenig.

Bei
$k = array(4, 3, 5, 6, 7, 7, 9);
findet er keine Strasse, bzw. die slice funktion funktioniert nicht:
"Ist offset negativ, beginnt die Sequenz offset Elemente vor dem Ende von array."

da n jetzt um 1 größer ist, darf man $i nicht mit 4 sondern um 3 subtrahieren.

User-1 am 20.07.06 14:44

ok, das wäre gelöst, aber es gibt noch ein Problem.

er Soll ja immer die größe Strasse einzeigen. Also muss man den array andersherum sortieren rsort();
Nur dann krieg ich es nicht mehr gebacken.

Ich glaube so:
<?php

echo "<pre>";

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

rsort($arr_straight);

print_r($arr_straight);

$n = 1;
foreach ($arr_straight as $key => $value) {
if ($value - 1 == $arr_straight[$key + 1])
$n++;
else
$n = 1;


if ($n == 5) {
echo $key;
print_r(array_slice($arr_straight, $key-3, 5));
echo "strasse";
break;
}
}

echo "</pre>";
?>

User-3 am 20.07.06 15:17

> da n jetzt um 1 größer ist, darf man $i nicht mit 4 sondern um 3 subtrahieren.

Hat mit $n nix zu tun. Ich bin mir doch recht sicher, dass 4 subtrahiert werden muss.. bei 3
bekomme ich falsche Ergebnisse.


> Ich glaube so: ...

Joa, glaub ich auch ;)

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt