2Danke
ERLEDIGT
JA
JA
ANTWORTEN
5
5
ZUGRIFFE
164
164
EMPFEHLEN
-
Hallo Leute,
ich habe ein Problem wo ich leider alleine nicht weitr komme.
Ich brauche aus einem Array einen bestimmten Wert und komme an den nicht ran.
In der Konstante 'MODULE_SHIPPING_TABLE_COST' sind Tabellarische Werte gespeichert.
Wenn nun $order_total z.b. 100 oder > 100 ist dann brauche ich den Wert 1. Wenn $order_total 200 oder > 200 ist, dann den Wert 2 usw.
Ich habe da was gebastelt, habe aber dann das Problem, das mir der letzte Wert nicht mehr angezeigt wird. Also wenn $order_total = 300 oder > 300 ist.
Hat jemand eine Idee? Vielen Dank!
PHP-Code:define('MODULE_SHIPPING_TABLE_COST', '100:1,200:2,300:3');
$order_total = 201;
$var = array();
$table_cost = preg_split("/[:,]/" , MODULE_SHIPPING_TABLE_COST);
$size = sizeof($table_cost);
for ($i=0, $n=$size; $i<$n; $i+=2) {
$var[$i] = $table_cost[$i+1];
if ($order_total <= $table_cost[$i]) {
$last_key = $i-2;
break;
}
}
//if(isset($last_key)){
if(key_exists($last_key,$var)){
echo $var[$last_key];
}
//}
-
06.02.12 13:50 #2
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Ist es wirklich so das bei 100 der Wert 1, bei 200 der Wert 2, bei 300 der Wert 3 usw. gesucht wird?
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Jap.
Unter Berücksichtigung der Zwischenwerte. Also wenn die Variable $order_total = 150 ist, dann muss auch 1 rauskommen....bis zum nächsten Wert 200.
Vielleicht lieg ich mit meinem Ansatz ja total falsch.
Ich habe nun der KOnstante einen utopischen Wert angehängt. So funktioniert es zwar, aber ich finde das extrem gepfuscht :-/
GrußPHP-Code:define('MODULE_SHIPPING_TABLE_COST', '100:1,200:2,300:3');
$order_total = 701;
$var = array();
$table_cost = preg_split("/[:,]/" , MODULE_SHIPPING_TABLE_COST . ', 50000000000000000000000000000000000000000000:0');
$size = sizeof($table_cost);
for ($i=0, $n=$size; $i<$n; $i+=2) {
$var[$i] = $table_cost[$i+1];
if ($order_total <= $table_cost[$i]) {
$last_key = $i-2;
break;
}
}
if(isset($last_key)){
if(key_exists($last_key,$var)){
echo $var[$last_key];
}
}
Geändert von xtramen01 (06.02.12 um 14:04 Uhr)
-
06.02.12 14:38 #4
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Also gehen tut es damit:
Bin mir aber sicher das es da noch schönere Lösungen dafür gibt.PHP-Code:<?php
define('MODULE_SHIPPING_TABLE_COST', '100:1,200:2,300:3');
$order_total = 201;
$var = preg_split("/[:,]/" , MODULE_SHIPPING_TABLE_COST);
// Keys erstellen
$table_cost = array();
for ($a = 0; $a < count($var)-1; $a = $a + 2) {
$table_cost[$var[$a]] = $var[$a+1];
}
// Auswerten
$wert = 0;
foreach (array_keys($table_cost) as $key) {
if ($order_total >= $key && $order_total <= ($key + 99)) {
$wert = $table_cost[$key];
}
}
if ($wert == 0) $wert = $table_cost[$key];
echo $wert;
?>Geändert von tombe (06.02.12 um 14:41 Uhr)
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Einen Array bilden mit deinem Wert als Index und dem Ausgabewert als Value.
Absteigend sortieren, damit der grösste Wert zuerst kommt.
Dann einfach alle durchgehen bis der gesuchte Wert grössergleich dem Key ist. Dann die Kosten auslesen
PHP-Code:$testValue = 150;
define('MODULE_SHIPPING_TABLE_COST', '100:1,200:2,300:3');
//String zerlegen in 'a00:1', '200:2' etc.
$array = explode(',', MODULE_SHIPPING_TABLE_COST);
$costs = array();
//Array erstellen Array(100=>1, 200=>2, 300=>3)
foreach($array as $part){
$items = explode(':', $part);
$costs[$items[0]] = $items[1];
}
//Absteigend nach Key sortieren: Array(300=>3, 200=>1, 100=>1)
krsort($costs);
//Alle durchgehen bis der zu suchende Wert grösser ist als dier Key des Arrays
foreach($costs as $value => $cost){
if($testValue >= $value) break;
//Cost zurücksetzen auf o. Somit kommt 0 heraus fals der gesuchte Wert unterhalb des kleinsten definierten ist
$cost = 0;
}
echo $cost;
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Danke, Ihr beiden. Echt Super! Darauf wäre ich nie gekommen.
Ähnliche Themen
-
Array rückwärts ab bestimmten Wert durchlaufen
Von versuch13 im Forum PHPAntworten: 9Letzter Beitrag: 17.10.07, 13:17 -
Bildtausch nach einem bestimmten Wert
Von Roland100 im Forum PHPAntworten: 3Letzter Beitrag: 26.06.07, 11:56 -
Bildtausch nach einem bestimmten Wert
Von Roland100 im Forum HTML & XHTMLAntworten: 0Letzter Beitrag: 25.06.07, 23:17 -
Wie greift man auf einen bestimmten Wert in einem XML File zu ?
Von hannehomuth im Forum PHPAntworten: 1Letzter Beitrag: 07.06.07, 14:43 -
Array Sortieren nach einem bestimmten Wert
Von ddhb im Forum PHPAntworten: 3Letzter Beitrag: 04.02.06, 14:46





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren