aus String alle Kombinationen von Gross/Kleinschreibung
Twilo
- php
Hallo,
hallo, ich möchte, dass aus ein String z.B. "jpg" ein Array erstellt wird, mit folgenden Werten
jpg, Jpg, JPg, JPG, jPg, jPG, jpG
gibt es für so etwas schon eine fertige PHP Funktion, die ich übersehen habe?
wenn es diese nicht gibt, wie kann man soetwas am besten anstellen?
ich stehe zur Zeit am Anfang und weiss nicht so recht wie ich anfangen muss, damit eien Funktion diese Aufgabe übernimmt
mfg
Twilo
Hallo,
jpg, Jpg, JPg, JPG, jPg, jPG, jpG
Da fehlt eine Permutation:
JPG, jpg, Jpg, JPg, jPG, jpG, jPg, JpG
Es müssen ja auch 8 werden, schließlich berechnet sich das mit zwei (Groß/Klein) hoch Anzahl der Zeichen. 2³ = 8
gibt es für so etwas schon eine fertige PHP Funktion, die ich übersehen habe?
So weit in die Stochastik geht PHP nicht, das wäre zu viel erwartet, nein.
wenn es diese nicht gibt, wie kann man soetwas am besten anstellen?
Du musst zunächst deinen String in ein Array aufsplitten und könntest dann folgende Funktion verwenden:
function permutationen($array)
{
foreach ($array as $i => $element) {
$temp = $array;
unset($temp[$i]);
if (sizeof($temp) > 0) {
$return = array_merge(permutationen($temp, $element), $return);
} else {
return array($element);
}
}
return $return;
}
Müsste funktionieren.
Gruß
Lachgas
Hallo,
Du musst zunächst deinen String in ein Array aufsplitten und könntest dann folgende Funktion verwenden:
function permutationen($array)
{
foreach ($array as $i => $element) {
$temp = $array;
unset($temp[$i]);
if (sizeof($temp) > 0) {
$return = array_merge(permutationen($temp, $element), $return);
} else {
return array($element);
}
}
return $return;
}
so ganz funktioniert es nicht
hab jetzt
$test = array('j', 'p', 'g');
print_r(permutationen($test));
als Ergebnis bekomme ich
Array
(
[0] => j
[1] => p
[2] => j
[3] => g
[4] => p
[5] => g
)
mfg
Twilo
Hi,
wenn es diese nicht gibt, wie kann man soetwas am besten anstellen?
ändern wir die Aufgabenstellung: Baue eine rekursive Funktion, die die binären Zahlen 000 bis 111 zurückliefert.
Cheatah
Hallo,
wenn es diese nicht gibt, wie kann man soetwas am besten anstellen?
ändern wir die Aufgabenstellung: Baue eine rekursive Funktion, die die binären Zahlen 000 bis 111 zurückliefert.
ist das selbe in grün :-)
wenn ich erstmal wissen würde, wie ich da anfangen muss
mfg
Twilo
Hi,
ändern wir die Aufgabenstellung: Baue eine rekursive Funktion, die die binären Zahlen 000 bis 111 zurückliefert.
ist das selbe in grün :-)
Bingo :-)
wenn ich erstmal wissen würde, wie ich da anfangen muss
Wo genau hast Du dabei Probleme? Ist es die Rekursion an sich?
Cheatah
Hallo,
wenn ich erstmal wissen würde, wie ich da anfangen muss
Wo genau hast Du dabei Probleme? Ist es die Rekursion an sich?
ja, dafür fehlt mir die Logik, ich hab zwar schon auf [link_http://tut.php-q.net/recursion.html@title=tut.php-q.net] etwas gelesen über Rekursion, nur ganz verstanden habe ich das nicht
ein bekannter hat mir jetzt eine Funktion geschrieben, da wird nix Rekursiv gemacht
hm...
hier ist mal die Funktion
function gross_klein($string){
$alternate = 0;
$binaerzaehler = 1;
$stringlänge = strlen($string);
$kombinationen = pow(2,$stringlänge);
$string_array = array();
$array_ausgabe = array();
for ($i = 1; $i <= $stringlänge; $i++){
for ($ii = 1; $ii <= $kombinationen; $ii++){
$string_array[$ii-1]{$i-1} = $string{$i-1};
if (bcmod($ii, $binaerzaehler) == 0){
if ($alternate == 0){
$string = strtoupper($string);
$alternate = 1;
}
elseif ($alternate == 1){
$string = strtolower($string);
$alternate = 0;
}
}
}
$binaerzaehler = $binaerzaehler * 2;
}
for ($ii = 0; $ii <= $kombinationen-1; $ii++){
$array_ausgabe[] = implode('', $string_array[$ii]);
}
return $array_ausgabe;
}
auf diese Lösung wäre ich wohl nie gekommen *g*
mfg
Twilo
Hallo du da draußen,
[...]
Irgendwie interessiert mich, wofür du das Ganze eigentlich brauchst…
Grüße von hier drinnen, aus Biberach an der Riss,
Candid Dauth (Dogfish)
Hello,
Irgendwie interessiert mich, wofür du das Ganze eigentlich brauchst…
Ich könnte mir denken, um alle Dateien mit der Endung 'jpg' unter Vernachlässigung der Groß-/Kleinschreibung auf einem casesensitiven Filesystem irgend eines OS zu finden?
Hältst Du das für möglich? ;-)
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
Ich könnte mir denken, um alle Dateien mit der Endung 'jpg' unter Vernachlässigung der Groß-/Kleinschreibung auf einem casesensitiven Filesystem irgend eines OS zu finden?
das geht auch einfacher ;-)
Cheatah
Hello,
Ich könnte mir denken, um alle Dateien mit der Endung 'jpg' unter Vernachlässigung der Groß-/Kleinschreibung auf einem casesensitiven Filesystem irgend eines OS zu finden?
das geht auch einfacher ;-)
Zeig mal. Aber bitte mit eingeschaltetem Safe_Mode, also i.d.R. ohne System(), Exec() und seine Brüder.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo du da draußen,
Ich könnte mir denken, um alle Dateien mit der Endung 'jpg' unter Vernachlässigung der Groß-/Kleinschreibung auf einem casesensitiven Filesystem irgend eines OS zu finden?
das geht auch einfacher ;-)
Zeig mal. Aber bitte mit eingeschaltetem Safe_Mode, also i.d.R. ohne System(), Exec() und seine Brüder.
Hmm… Also, wenn ich einen Dateinamen hätte, bei dem ich herausfinden wöllte, ob er auf ‚.jpg‘ oder Ähnliches endet, würde ich nicht alle Möglichkeiten durchgehen, sondern einfach strtolower() anwenden…
Grüße von hier drinnen, aus Biberach an der Riss,
Candid Dauth (Dogfish)
Hello,
Hmm… Also, wenn ich einen Dateinamen hätte, bei dem ich herausfinden wöllte, ob er auf ‚.jpg‘ oder Ähnliches endet, würde ich nicht alle Möglichkeiten durchgehen, sondern einfach strtolower() anwenden…
Zeig mal bitte, wie Du das machst.
Die Aufgabenstellung lautet also. ob im Filesystem ein File vorhanden ist,
dass irgendwie 'bild_1.jpg' oder 'Bild_1.JPG' oder 'BILD_1.jpG' oder wie auch immer heißt. Wenn Du dieses File nmlich auf einen schlampig eingerichteten Windows-Rechner herunterlädtst, könnte es sein, dass Du Dir 'BILD_1.JPG' damit überschreibst.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Sup!
Zeig mal. Aber bitte mit eingeschaltetem Safe_Mode, also i.d.R. ohne System(), Exec() und seine Brüder.
Soll das heissen, im Safe-Mode kann PHP nichtmal ein Verzeichnis einlesen?
Gruesse,
Bio
Hello,
Zeig mal. Aber bitte mit eingeschaltetem Safe_Mode, also i.d.R. ohne System(), Exec() und seine Brüder.
Soll das heissen, im Safe-Mode kann PHP nichtmal ein Verzeichnis einlesen?
Nein.
Ein Verzeichnis wird php i.d.R. einlesen können, wenn es nicht zuviele Files hat.
Das soll auch schon vorgekommen sein. Und es soll auch vorgekommen sein, dass jemand aus Sicherheitserwägungen das R-Recht für das Verzeichnis weggenommen hat. Die Files selber lassen sich dann bei qualifizierter Pfadangabe natürlich trotzdem noch lesen ;-)
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Sup!
Ein Verzeichnis wird php i.d.R. einlesen können, wenn es nicht zuviele Files hat.
Muss ich jetzt beeindruckt sein? ]:-)
Das soll auch schon vorgekommen sein.
Okay, das kann immer passieren, besonders über NFS oder so gibt's die tollsten Sachen unter Unix.
Das soll auch schon vorgekommen sein. Und es soll auch vorgekommen sein, dass jemand aus Sicherheitserwägungen das R-Recht für das Verzeichnis weggenommen hat. Die Files selber lassen sich dann bei qualifizierter Pfadangabe natürlich trotzdem noch lesen ;-)
Warum kommt es dann nicht vor, dass jemand aus PHP-rafft's-sonst-nicht Erwägungen die PHP-Daten-Partition auf einem Filesystem einrichtet, dass - von Natur aus oder durch hinterhältige Manipulation - zwischen Groß- und Kleinschreibung nicht unterscheidet?
Gruesse,
Bio
Hello,
Warum kommt es dann nicht vor, dass jemand aus PHP-rafft's-sonst-nicht Erwägungen die PHP-Daten-Partition auf einem Filesystem einrichtet, dass - von Natur aus oder durch hinterhältige Manipulation - zwischen Groß- und Kleinschreibung nicht unterscheidet?
Gute Frage.
Das müssten eigentlich die ganzen Provider beantworten, die auf Linux hosten.
Auf meinem eigenen Server kann ich mir das schließlich so einstellen, wie ich es wünsche.
Aber gut 90% (einfach so geraten) der PHP-User dürften wohl bei einem 'ach leck mich doch'-Provider hosten lassen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo,
Irgendwie interessiert mich, wofür du das Ganze eigentlich brauchst…
Ich könnte mir denken, um alle Dateien mit der Endung 'jpg' unter Vernachlässigung der Groß-/Kleinschreibung auf einem casesensitiven Filesystem irgend eines OS zu finden?
Hältst Du das für möglich? ;-)
du triffst den Nagel auf den Kopf :-)
mfg
Twilo
Hi,
ja, dafür fehlt mir die Logik, ich hab zwar schon auf tut.php-q.net etwas gelesen über Rekursion, nur ganz verstanden habe ich das nicht
okay, da können wir dran arbeiten. Was genau hast Du nicht verstanden? Vielleicht hilft eine Übungsaufgabe:
Gegeben sei eine beliebige natürliche Zahl n. Schreibe eine rekursive Funktion, die folgendes macht: Wenn n gerade ist, ändere n auf n/2, andernfalls auf n*3+1. Die Funktion endet, wenn n=1 ist. Gib die jeweiligen Zwischenergebnisse aus.
Cheatah
Hallo,
ja, dafür fehlt mir die Logik, ich hab zwar schon auf tut.php-q.net etwas gelesen über Rekursion, nur ganz verstanden habe ich das nicht
okay, da können wir dran arbeiten. Was genau hast Du nicht verstanden? Vielleicht hilft eine Übungsaufgabe:
Gegeben sei eine beliebige natürliche Zahl n. Schreibe eine rekursive Funktion, die folgendes macht: Wenn n gerade ist, ändere n auf n/2, andernfalls auf n*3+1. Die Funktion endet, wenn n=1 ist. Gib die jeweiligen Zwischenergebnisse aus.
ich werd das mal bei Zeiten versuchen zu lösen, nur zur Zeit ist meine Zeit knapp, ich werde mich aber diesbezüglich wieder melden :-)
mfg
Twilo