Array richtig verwenden

Mh, ich vermute mal, dass deine PHP-Version unter 5.3 ist. Ich verwende in meinem Beispiel eine Alpha-Funktion oder auch anonyme Funktion genannt. Diese wurden erst in PHP-Version 5.3.0 eingeführt.
 
Hier mal ein Weg wie du es selber machen kannst:

Schreibe eine Funktion get_next_smaller_value($array, $check){ }
$array, das Array in dem gesucht wird,
$check, der Wert zu dem der nächst kleinere gesucht werden soll

1) Sortiere das Array aufsteigend. Siehe asort()

2) Lege eine Variable $last an, die den jeweils letzten Array Schlüssel $key speichern soll (vor der Schleife anlegen)
3) Durchlaufe das Array mit einer foreach($array as $key=>$value) Schleife. Am Ende der Forech Schleife soll der aktuelle Wert $value in $last gespeichert werden.
4)Führe innerhalb der foreach Schleife, vorher, einen Vergleich durch:
--Wenn der aktuelle wert $value größer als der gegebene wert $check ist, ist der vorherige Wert $last dein gesuchter Wert. Dann kannst du den letzten Schlüssel $last aus der Funktion mit return zurück geben.
 
Ich strebe einen "keine Funktion" Code an.

So "simpel" wie der eine Code zum festlegen der Maßstäbe.

PHP:
$var5 = '70CM';
$replace = array(
  '10CM'  =>  1000,
  '20CM'  =>  2000,
  '30CM'  =>  3000,
  '40CM'  =>  4000,
  '50CM'  =>  5000,
  '60CM'  =>  6000,
  '70CM'  =>  7000,
  '80CM'  =>  8000,
  '90CM'  =>  9000,
  '100CM' => 10000,
);
$mwidth = str_replace(array_keys($replace), array_values($replace), $var5);

Vielleicht mit "umgedrehtem" Array?

PHP:
$var7 = '950';

$replace = array(
   ...
  '1000'  =>  10CM,
  '2000'  =>  20CM,
   ...
);
 
Dann lasse halt die Funktionen außen drum weg. Der Code bleibt ja der selbe.

$array, das Array in dem gesucht wird,
$check, der Wert zu dem der nächst kleinere gesucht werden soll

1) Sortiere das Array aufsteigend. Siehe asort()

2) Lege eine Variable $last an, die den jeweils letzten Array Schlüssel $key speichern soll (vor der Schleife anlegen)
3) Durchlaufe das Array mit einer foreach($array as $key=>$value) Schleife. Am Ende der Forech Schleife soll der aktuelle Wert $value in $last gespeichert werden.
4)Führe innerhalb der foreach Schleife, vorher, einen Vergleich durch:
--Wenn der aktuelle wert $value größer als der gegebene wert $check ist, ist der vorherige Wert $last dein gesuchter Wert
 
So könnte man es auch machen.
PHP:
$var8 = '8CM';
$mwidth = (int)str_ireplace('CM','00',$var8);
// 800

$var8 = 832;
$mwidth = (int)floor($var8/100)*100;
// 800

$mwidth = (int)ceil($var8/100)*100;
// 900

$mwidth = (int)round($var8,-2);
// 800
 
Zuletzt bearbeitet:
Hallo. :)

Vielen Dank für den Code.

Aber die runden Zahlen die ich hier im Beispiel gezeigt habe, kommen in meinem Fall kaum vor. Es sind meistens "gemischte Zahlen" wie z.B. 6422 oder 3289 usw.

Ich habe es gestern den ganzen Abend und die ganze Nacht probiert aber ich kriege es nicht hin.
 
...
Es sind meistens "gemischte Zahlen" wie z.B. 6422 oder 3289 usw.
...
Sry aber jetzt versteh ich dein Problem nicht?
PHP:
$var8 = 6422;
$mwidth = (int)floor($var8/100)*100;
// 6400

$var8 = 3289;
$mwidth = (int)floor($var8/100)*100;
// 3200
Das wäre doch der nächst kleinere Wert in deinem Array? Je nachdem auf welche Stelle du runden willst musst du nur die Werte manipulieren.
 
Ich verstehe momentan ehrlich gesagt nur Bahnhof.

Ich habe eine Variable mit zwei verschiedenen Arten von Inhalt.

1. Möglichkeit:
PHP:
$var = '70CM'; // Der Wert kann auch 73CM usw. sein!

2. Möglichkeit:
PHP:
$var = '00CM';

Bei der 1. Möglichkeit wird die Breite in Pixel einfach einem festen Wert zugeordnet.

PHP:
70CM -> 7000 // 70 cm sind 7000 px

Der Code dazu:
PHP:
$var = '70CM';
$replace = array(
  '10CM'  =>  1000,
  '20CM'  =>  2000,
  '30CM'  =>  3000,
  '40CM'  =>  4000,
  '50CM'  =>  5000,
  '60CM'  =>  6000,
  '70CM'  =>  7000,
  '80CM'  =>  8000,
  '90CM'  =>  9000,
  '100CM' => 10000,
);
$mwidth = str_replace(array_keys($replace), array_values($replace), $var);

Jetzt kann es aber sein das der User "00CM" als Maß angibt. Und "00CM" bedeutet das er die kleinst mögliche Breite möchte.

Ich denke ich müsste in diesem Fall auch wieder mit dem Array arbeiten aber dieses mal umgekehrt.

Anmerkung: Wenn "00CM" ausgewählt wurde, kommt eine neuen Variable ins Spiel. Also eine Variable die die tatsächliche Breite ermittelt wie z.B. 6422 px.

PHP:
$var = '00CM';
$replace = array(
  '1000'  =>  10CM,
  '2000'  =>  20CM,
  '3000'  =>  30CM,
  '3500'  =>  35CM,
 ...
 ...
 ...
);

Sprich: Ich habe eine "Tatsächliche Breite in Pixel Angabe" wie z.B. 6422. Nun soll das Skript alle "Breiten Varianten" im Array durchgehen und die kleinst mögliche Kombination finden und verwenden.

PHP:
$var1 = '00CM';
$var2 = '6422';

$replace = array(
  '1250'  =>  12CM,
  '1500'  =>  15CM,
 ...
 ...
 ...
  '6400'  =>  64CM,
  '6500'  =>  65CM,
 ...
 ...
 ...
);

Die "6422" könnten also nur in "6500 => 65CM" passen.
 
Zuletzt bearbeitet:
Wieso wird mein Beitrag eigentlich ständig ignoriert? Wenn du dich daran mal versuchen würdest, könntest du das auf alle deine Beispiele erweitern.
 
Zurück