Daten in einem ARRAY suchen
Maria Martin
- php
Hallo liebes Forum,
da ich ein PHP Anfänger bin, suche ich folgende Lösung.
ich habe ein ARRAY
$zeile=array(1=>0.005,
2=>0.01,
3=>0.02,
4=>0.03,
5=>0.04,
6=>0.05,
7=>0.07,
8=>0.10);
Wenn ich einen Key eines Bestimmten Wertes suche benutze ich
array_search(0.01,$zeile);
Das funktionier prima.
Wenn ich z.B. den Wert 0.06 habe, suche ich die Keys 6 und 7,
da ja der Wert dazwischen liegt.
Wie kann ich dies einfach realisieren.
Bitte um eine einfach Erklärung für einen Anfänger.
Danke im Voraus für die Hilfe.
Gruß Maria
Hello,
da ich ein PHP Anfänger bin, suche ich folgende Lösung.
Das wird sich hier sehr schnell ändern, wenn Du Deine Fragen weiter so gut formulierst *Hut ab*
ich habe ein ARRAY
$zeile=array(1=>0.005,
2=>0.01,
3=>0.02,
4=>0.03,
5=>0.04,
6=>0.05,
7=>0.07,
8=>0.10);Wenn ich einen Key eines Bestimmten Wertes suche benutze ich
array_search(0.01,$zeile);
Das funktionier prima.Wenn ich z.B. den Wert 0.06 habe, suche ich die Keys 6 und 7,
da ja der Wert dazwischen liegt.
Du suchst also eine "near()"-Suche. Dazu muss das Array sortiert werden. Schau dir mal die Sortierfunktionen für Arrays an: natsort(), asort(), usw...
http://de.php.net/manual/de/function.natsort.php
http://de.php.net/manual/de/function.asort.php
und vergiss die Flags nicht (SORT_NUMERIC)
Fragen, ob der Wert im Array ist
Wenn nein, Array sortieren
Dann mit einer foreach()-Schleife das array durchlaufen, bis der gesuchte Wert überschritten wurde.
mit prev() kannst Du dann den Schlüssel des vorigen Wertes ermitteln, da die Schlüssel und Werte ja je nach Sortierverfahren gebunden bleiben, oder aber neu kombiniert werden!
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Dann mit einer foreach()-Schleife das array durchlaufen, bis der gesuchte Wert überschritten wurde.
Genau das kann ich nicht. Kannst du mir das bitte zeigen, wie man das macht.
Dann mit einer foreach()-Schleife das array durchlaufen, bis der gesuchte Wert überschritten wurde.
Genau das kann ich nicht. Kannst du mir das bitte zeigen, wie man das macht.
http://de.php.net/manual/de/control-structures.foreach.php
Wenn dir das garnicht weiterhilft...schreib nochmal
http://de.php.net/manual/de/control-structures.foreach.php
Wenn dir das garnicht weiterhilft...schreib nochmal
Die Seite bin ich auch gerade, Danke. Finde aber keine Lösung zu meinem Problem
Die Seite bin ich auch gerade, Danke. Finde aber keine Lösung zu meinem Problem
Na mal schaun:
foreach($arrayInDemDuSuchst as $wertDesElementes)
{
if ($wertNachDemDuSuchst > $wertDesElementes)
{
$vorherigerWert = prev($arrayInDemDuSuchst);
$aktuellerWert = $wertDesElementes;
}
else
{
echo "...";
}
}
Und dann suchst du in dem array mit array search nach den beiden Werten $vorherigerWert und $aktuellerWert und erhältst so die Zeile zurück.
(vorher muss natürlich sortiert werden, so wie's Tom schon angedeutet hat)
Grüße
Sinepp
$vorherigerWert bekomme ich keinen Wert.
Was mache ich noch Falsch???
Hier mein Code:
$spalte1=array(1=>0.15,
2=>0.25,
3=>0.50,
4=>0.75,
5=>1.00,
6=>1.50,
7=>2.00);
foreach($spalte1 as $wertDesElementes)
{
if(0.4 > $wertDesElementes)
{
$vorherigerWert=prev($spalte1);
$aktuellerWert=$wertDesElementes;
}
else
{
// echo "...";
}
}
echo "vorherigerWert: ".$vorherigerWert."<br>";
echo "aktuellerWert: ".$aktuellerWert."<br>";
echo "key1: ".array_search($vorherigerWert,$spalte1)."<br>";
echo "key2: ".array_search($aktuellerWert,$spalte1)."<br>";
Ergebnis:
vorherigerWert:
aktuellerWert: 0.25
key1:
key2: 2
Hello,
$vorherigerWert bekomme ich keinen Wert.
Was mache ich noch Falsch???Hier mein Code:
$_spalte1=array
(
1=>0.15,
2=>0.25,
3=>0.50,
4=>0.75,
5=>1.00,
6=>1.50,
7=>2.00
);
$suchwert = 0.40;
foreach($_spalte1 as $key => $val)
{
if($suchwert > $val)
{
break;
}
}
if ($suchwert > $val) ## das ist notwendig, da $key auf dem letzten Element
{ ## des Arrays nicht weitergesetzt wird
echo "Wert ist größer als alle Werte im Array";
}
else
{
echo "Wert ist kleiner als $val in Element $key";
}
echo "vorherigerWert: ".$vorherigerWert."<br>";
echo "aktuellerWert: ".$aktuellerWert."<br>";echo "key1: ".array_search($vorherigerWert,$spalte1)."<br>";
echo "key2: ".array_search($aktuellerWert,$spalte1)."<br>";Ergebnis:
vorherigerWert:
aktuellerWert: 0.25
key1:
key2: 2
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Danke, jetzt müßte ich das Problem lösen können.
Schönen Tag noch......
Die Reise geht weiter:
www.arved-fuchs.de/nwp/logbuch.htm
Hello,
Danke, jetzt müßte ich das Problem lösen können.
Sorry, wenn ich vorhin etwas kurz angebunden war. Aber ich musste meinem Schäffe eben noch ein paar wichtige Informationen rauslocken und der kam vorhin gerade rein. Wenn er schon die Aufträge ranschafft, dann muss schließlich auch die Produktion stimmen. ;-)
Also melde Dich ruhig nochmal, wenn es noch kneift. Da sind noch einige Fallen drin versteckt. Die Aufgabe sieht einfacher aus, als sie ist.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo ihr da draußen,
$suchwert = 0.40;
foreach($_spalte1 as $key => $val)
{
if($suchwert > $val)
{
break;
}
}
Hmm... Bricht das nicht gleich beim ersten ab, da 0.40 größer als 0.15 ist? Meines Erachtens müsste es ein < statt des > sein.
Deswegen hat wohl auch Marias Lösung nicht wie gewollt funktioniert.
Grüße von hier drinnen, aus Biberach an der Riss,
Candid Dauth (Dogfish)
Hello,
Hallo ihr da draußen,
$suchwert = 0.40;
foreach($_spalte1 as $key => $val)
{
if($suchwert > $val)
{
break;
}
}Hmm... Bricht das nicht gleich beim ersten ab, da 0.40 größer als 0.15 ist? Meines Erachtens müsste es ein < statt des > sein.
Das kommt doch darauf an, wie das array sortiert ist.
Wenn es von groß zu klein sortiert ist macht man es eben so herum, sonst anders herum. Da hast Du dann natürlich recht. Das Maria aber bestimmt schon gemerkt.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Maria,
Wenn ich z.B. den Wert 0.06 habe, suche ich die Keys 6 und 7,
da ja der Wert dazwischen liegt.
kommt darauf an, ob das Array tatsächlich so wie von dir gezeichnet aussieht. Falls ja, findet er ja bei 0.06 nichts. Dann könntest du den Fall abfangen und nachschauen, ob 0.06+0.0.1 bzw. 0.06-0.01 existiert (bzw. beide). Dann erhältst du den Key 5 und 6.
Beantwortet das deine Frage?
Grüße
Sinepp
Beantwortet das deine Frage?
Nein, leider nicht.
Das ARRAY sieht so aus, nur größer (mehr Werte)