string nach bestimmten zeichen durchsuchen
theresa
- php
hallo ihr lieben!
ich bin gerade dabei eine art kalenderskirpt fertigzustellen.
in der datenbank (leider so vorgegeben) sind de datumsangaben nicht in einem standardformat gespeichert.
ich habe nun also folgende 3 fälle:
1.1.2005, 1.12.2005 oder 12.1.2005
ich brauch jeweils tag, monat und jahr als eigene variable.
ich wollt mit substr arbeiten, was mir aber aufgrund der angaben nicht möglich schein...
ich suche als nach einer möglichkeit alle werte bis zum ersten punkt und danach alle werte bis zu zweiten punkt auszulesen und in eine variable zu speichern.
entweder hab ichs überlesen (es is ja schon spät ;) ) oder es gibt
keine anwendbare funktion (was ich nicht glaube...)
danke für eure hilfe und ideen!!
theresa
Hallo!
ich habe nun also folgende 3 fälle:
1.1.2005, 1.12.2005 oder 12.1.2005
$date = 12.1.2005;
preg_match('/(\d+)\.(\d+)\.(\d+)/', $date, $match);
$day = $match[1];
$month = $match[2];
$year = $match[3];
André Laugks
hi!
$date = 12.1.2005;
preg_match('/(\d+).(\d+).(\d+)/', $date, $match);
$day = $match[1];
$month = $match[2];
$year = $match[3];
HAMMER!!!!
dankeschön!!!!!!!
theresa
Moin!
hi!
$date = 12.1.2005;
preg_match('/(\d+).(\d+).(\d+)/', $date, $match);
$day = $match[1];
$month = $match[2];
$year = $match[3];HAMMER!!!!
dankeschön!!!!!!!
Nö. Hammerumständlich und langsam (preg_match ist langsam)
$strDate = '12.1.2005';
list($intDay,$intMonth,$intYear) = explode('.', $strDate)
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo!
Nö. Hammerumständlich und langsam (preg_match ist langsam)
Häää? Was ist da Hammerumständlich? Langsam? Zeige mir mal den Geschwindigkeitsunterschied!
André Laugks
Hallo André.
Nö. Hammerumständlich und langsam (preg_match ist langsam)
Häää? Was ist da Hammerumständlich? Langsam? Zeige mir mal den Geschwindigkeitsunterschied!
Siehe Marc Reichelts Benchmarkskript aus dem Archiv:
Prozentual (1/2): 1.756667567592
Prozentual (1/2): 1.7662185106443
Prozentual (1/2): 1.76012934384
Prozentual (1/2): 1.7766593246875
Prozentual (1/2): 1.7897422125827
Prozentual (1/2): 1.7716454520826
Prozentual (1/2): 1.7768270465059
Prozentual (1/2): 1.7451044622707
Prozentual (1/2): 1.7634359288952
Prozentual (1/2): 1.7670709627948
Deine Methode ist also grundsätzlich langsamer.
Einen schönen Donnerstag noch.
Gruß, Ashura
Hallo!
Deine Methode ist also grundsätzlich langsamer.
-> https://forum.selfhtml.org/?t=119210&m=764989
André Laugks
Hallo André.
Deine Methode ist also grundsätzlich langsamer.
Du hast nach einem Nachweis des Geschwindigkeitsunterschiedes gefragt und diesen von uns beiden wie gewünscht erhalten.
Dass ein Mensch den Unterschied eher nicht bemerkt ändert nichts an den Tatsachen.
Einen schönen Donnerstag noch.
Gruß, Ashura
Moin!
Häää? Was ist da Hammerumständlich?
Schlecht lesbarer Vierzeiler vers. schlecht lesbarer Einzeiler.
Langsam? Zeige mir mal den Geschwindigkeitsunterschied!
<?php
# Voreinstellungen
# Gesetzte Variablen:
$strDate = '12.1.2005';
# Wiederholungen pro Testdurchlauf
$intWiederholungen=10000;
# Anzahl Testdurchläufe:
$intTests=5;
if (isset($_SERVER['HTTP_HOST'])) {
$bolToHTML=true;
} else {
$bolToHTML=false;
}
# Tests:
for ($k=0; $k<$intTests; $k++) {
############ Variante 1 ##################
$intStartTime[$k][0]=microtime();
for ($i=0; $i<$intWiederholungen; $i++) {
preg_match('/(\d+)\.(\d+)\.(\d+)/', $strDate, $match);
$day = $match[1];
$month = $match[2];
$year = $match[3];
} #next Wiederholung
$intTime[$k][0]=GetDecEndtime($intStartTime[$k][0], microtime());
$intSumTime[0]=$intSumTime[0]+$intTime[$k][0];
############ Variante 2 ##################
$intStartTime[$k][1]=microtime();
for ($i=0; $i<$intWiederholungen; $i++) {
list($intDay,$intMonth,$intYear) = explode('.', $strDate);
}
$intTime[$k][1]=GetDecEndtime($intStartTime[$k][1], microtime());
$intSumTime[1]=$intSumTime[1]+$intTime[$k][1];
} # next Test ($k)
if ($bolToHTML) {
?>
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<pre>
<?php
}
for ($k=0; $k<$intTests; $k++) {
echo "\nDurchlauf $k:\n";
echo "Variante 1: ".$intTime[$k][0]."\n";
echo "Variante 2: ".$intTime[$k][1]."\n";
}
echo "---------------------------------------\n";
echo "Summen:\n";
echo "Variante 1: ".$intSumTime[0]."\n";
echo "Variante 2: ".$intSumTime[1]."\n";
echo "---------------------------------------\n";
echo "Durchschnitte:\n";
echo "Variante 1: ".$intSumTime[0]/($intWiederholungen*$intTests)."\n";
echo "Variante 2: ".$intSumTime[1]/($intWiederholungen*$intTests)."\n";
echo "---------------------------------------\n";
if ($intSumTime[0] < $intSumTime[1]) {
echo "Ergebnis: Variante 1 ist schneller\n";
}
if ($intSumTime[1] < $intSumTime[0]) {
echo "Ergebnis: Variante 2 ist schneller\n";
}
if ($intSumTime[0] == $intSumTime[1]) {
echo "Ergebnis: Keine signifikanten Laufzeitunterschiede\n";
}
echo "...................Ende.....................\n\n";
exit;
# Funktionen:
function GetDecEndtime($strStart, $strEnde) {
#echo "$strStart, $strEnde\n";
list($intBruchteilStart, $intSekundeStart)= explode(' ', $strStart);
list($intBruchteilEnde, $intSekundeEnde) = explode(' ', $strEnde);
$intSekunden = $intSekundeEnde - $intSekundeStart;
$intBruchteil= $intBruchteilEnde - $intBruchteilStart;
return $intSekunden+$intBruchteil;
}
if ($bolToHTML) {
?>
</pre>
</body>
</html>
<?php
}
?>
Ausgaben auf meinem Rechner:
fastix@trainer:~> php -q laufzeittest.php
Durchlauf 0:
Variante 1: 0.066468
Variante 2: 0.037833
Durchlauf 1:
Variante 1: 0.067877
Variante 2: 0.038036
Durchlauf 2:
Variante 1: 0.067119
Variante 2: 0.037485
Durchlauf 3:
Variante 1: 0.067762
Variante 2: 0.038137
Durchlauf 4:
Variante 1: 0.068756
Variante 2: 0.038459
---------------------------------------
Summen:
Variante 1: 0.337982
Variante 2: 0.18995
---------------------------------------
Durchschnitte:
Variante 1: 6.75964E-06
Variante 2: 3.799E-06
---------------------------------------
Ergebnis: Variante 2 ist schneller
...................Ende.....................
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
Das Skript enthielt noch ein kleineres Fehlerchen. Ich habe die bereinigte Variante meines Skriptleins zur Messung von Laufzeitunterschieden jetzt unter http://www.fastix.de/test/laufzeittest.php bereitgestellt. Was mir auffällt: Auf dem gut belastetem Produktivserver fällt das Ergebnis wesentlich dramatischer aus als bei mir lokal.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo!
Schlecht lesbarer Vierzeiler vers. schlecht lesbarer Einzeiler.
Für Dich!
Ergebnis: Variante 2 ist schneller
Der Mensch kann nur Temperaturdifferenzen von 4 Kelvin unterscheiden, Millisekunden schon gar nicht!
André Laugks
hi,
ich bin gerade dabei eine art kalenderskirpt fertigzustellen.
in der datenbank (leider so vorgegeben) sind de datumsangaben nicht in einem standardformat gespeichert.
Das dürfte gerade für einen Kalender ein ziemlicher Nachteil sein - gerade auch was Suchanfragen mit Einschränkung auf bestimmte Datümer angeht.
Kannst oder willst du das nicht ändern? In letzterem Falle überlege dir noch mal gründlich, was letztendlich besser sein könnte.
ich habe nun also folgende 3 fälle:
1.1.2005, 1.12.2005 oder 12.1.2005ich brauch jeweils tag, monat und jahr als eigene variable.
explode() zum Aufteilen am Punkt, ergibt ein Array mit drei Elementen.
Wenn du wirklich einzelne Variablen willst (aber wozu) - dann noch list() darauf anwenden.
gruß,
wahsaga