tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von tombe
  • 1 Beitrag von Yaslaw
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
164
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    xtramen01 xtramen01 ist offline Mitglied Brokat
    Registriert seit
    Mar 2008
    Beiträge
    292
    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];
            }
          
    //} 
     

  2. #2
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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.

  3. #3
    xtramen01 xtramen01 ist offline Mitglied Brokat
    Registriert seit
    Mar 2008
    Beiträge
    292
    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 :-/

    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];
            }
          } 
    Gruß
    Geändert von xtramen01 (06.02.12 um 14:04 Uhr)
     

  4. #4
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Also gehen tut es damit:

    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;
    ?>
    Bin mir aber sicher das es da noch schönere Lösungen dafür gibt.
    Geändert von tombe (06.02.12 um 14:41 Uhr)
    xtramen01 bedankt sich. 
    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.

  5. #5
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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
    xtramen01 bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    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

  6. #6
    xtramen01 xtramen01 ist offline Mitglied Brokat
    Registriert seit
    Mar 2008
    Beiträge
    292
    Danke, Ihr beiden. Echt Super! Darauf wäre ich nie gekommen.
     

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 17.10.07, 13:17
  2. Bildtausch nach einem bestimmten Wert
    Von Roland100 im Forum PHP
    Antworten: 3
    Letzter Beitrag: 26.06.07, 11:56
  3. Bildtausch nach einem bestimmten Wert
    Von Roland100 im Forum HTML & XHTML
    Antworten: 0
    Letzter Beitrag: 25.06.07, 23:17
  4. Antworten: 1
    Letzter Beitrag: 07.06.07, 14:43
  5. Antworten: 3
    Letzter Beitrag: 04.02.06, 14:46