Willkommen in der Webstatt Zum Webstatt Blog und Stories
Rebel4s Rebel4s 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?
nuit nuit 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

Rebel4s Rebel4s am 20.07.06 12:34

so änlich ist auch meine variante.

milahu milahu am 20.07.06 13:51

Sehr seltsame Notation.. aber wurscht.

nuit, 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;
}
}
?>

nuit nuit am 20.07.06 13:54

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

Rebel4s Rebel4s am 20.07.06 14:00

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


wie meinste das?

Die lösung von milahu ist gut. vielen dank!

Wozu braucht man $_? Was bezweckt der _?

milahu milahu am 20.07.06 14:06

> Was bezweckt der _?

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

Rebel4s Rebel4s 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!

milahu milahu am 20.07.06 14:23

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

Ah danke, schnell ausbessern ;)

Rebel4s Rebel4s 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.

Rebel4s Rebel4s 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>";
?>

milahu milahu 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