Webstatt.org - Community seit 2006 - 2012 (2024?)

Strasse

Avatar user-287
20.07.2006 10: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!

Avatar user-271
20.07.2006 10: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

#!/bin/bash
traurig){ neutral:& };:
Avatar user-287
20.07.2006 10:34

so änlich ist auch meine variante.

Avatar user-255
20.07.2006 11:51

Sehr seltsame Notation.. aber wurscht.

nuit, vor dem Vergleich sollten noch doppelte Einträge entfernt werden zwinkern

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

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-271
20.07.2006 11:54

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

#!/bin/bash
traurig){ neutral:& };:
Avatar user-287
20.07.2006 12:00

Original von user-271
nicht unbedingt...du kannst sie auch drinnen lassen zwinkern wenn man es anders coded...


wie meinste das?

Die lösung von user-255 ist gut. vielen dank!

Wozu braucht man $_? Was bezweckt der _?

Avatar user-255
20.07.2006 12:06

> Was bezweckt der _?

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

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-287
20.07.2006 12: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!

Avatar user-255
20.07.2006 12:23

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

Ah danke, schnell ausbessern zwinkern

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-287
20.07.2006 12: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.

Avatar user-287
20.07.2006 12: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>";
?>

Avatar user-255
20.07.2006 13: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 zwinkern

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm