Beiträge von Basi

    Eine Katastrophe ist das jetzt nicht. Visual Studio Code ist eben ein Code Editor und keine integrierte Entwicklungsumgebung wie Webmatrix. Da musst du schon Visual Studio (ohne Code) nutzen. Das wäre dann auch von Microsoft (wie Webmatrix) und bietet neben Hochsprachen auch Unterstützung für HTML, CSS, JavaScript, ASP.NET und mehr an.


    Syntaxfehler werden in Visual Studio Code, Brackets, Sublime Text und Atom (alle getestet) identisch KORREKT vom Syntax-Highlighter angezeigt. Man muss Fehler quasi übersehen wollen, um das nicht zu bemerken. Inline-Validierung ist eine nette Sache, darf aber von einem Code Editor nicht erwartet werden.


    Wie gesagt: Durch Auslagerung von JavaScript und CSS leistet man hier aktiven Katastrophenschutz, da funktioniert IntelliSense nämlich problemlos. In 3-4 Zeilern reicht das Syntax-Highlighting einfach völlig aus. Zumal gerade mit CSS nicht viel schief laufen kann. Fehlende Semikola, fehlende Klammern, fällt durch gute Struktur und Highlighter sofort ins Auge.

    Modulus ist die Rechenoperation mit dem %-Zeichen. Dabei handelt es sich um eine Division, wobei der Rest ermittelt wird:


    PHP
    1. $division = 7 / 3; // 2.3333333333333
    2. $modulus = 7 % 3; // 1 ( Die 3 passt 2 mal in die 7 [2 * 3 = 6] und als Rest bleibt 1)


    $unteilbar ist jetzt der Indikator dafür, ob nach dem Durchlauf der zweiten Schleife eine Ausgabe stattfindet. Es wird jede Zahl bis zur aktuellen auf Teilbarkeit geprüft und wenn eine Teilbarkeit festgestellt wurde, wird $unteilbar auf false gesetzt und mittels break die innere Schleife abgebrochen. Da $unteilbar jetzt false ist, findet keine Ausgabe statt und es wird mit der nächsten Zahl weitergemacht.


    Wenn eine teilbare Zahl gefunden wurde weiß man bereits, dass es sich um KEINE Primzahl handelt, die verbleibenden Zahlen zu prüfen ist daher nicht nötig. Deswegen kann man mittels break abbrechen.


    Der Algorithmus eignet sich übrigens nicht für sehr große Zahlen, da die Anzahl der Durchläufe der Schleifen exponentiell wächst.


    Du siehst schon warum ich sagte, dass Algorithmik vor Allem mit Mathematik zu tun hat :)


    Die erste Schleife müsste übrigens auch bei 2 anfangen zu zählen. 1 ist keine Primzahl.

    Eingebettete Stylesheets und Skripte werden nicht validiert. Mir persönlich ist das bisher nicht einmal aufgefallen, da ich sowieso immer auslagere, dann stellt das auch kein Problem dar.


    Mir ist spontan auch keine Erweiterung oder Einstellung bekannt, welche das behebt.


    Erweiterungen, die ich empfehlen kann sind:


    HTMLHint
    jshint
    HTML CSS Support


    Dadurch, dass man bis zu 3 Dateien nebeneinander öffnen kann, ist es auch noch mal deutlich einfacher seine Stylesheets und Skripte auszulagern (siehe Bild).


    IntelliSense ist in Visual Studio Code vorinstalliert und hilft beim Coden. In einem CSS Dokument einfach mal STRG + Leertaste drücken (siehe Bild).


    intellisense.png

    Ist halt der Nachfolger. Webmatrix wurde seit dem 29. Juni 2015 nicht mehr aktualisiert und was das Teil kann wird ja auf der verlinkten Seite erklärt. Mehr dazu gibt es hier.


    IntelliSense (unschlagbar), Git implementiert, unzählige Erweiterungen, für alle gängien Plattformen, 47 unterstütze Sprachen, Emmet Snippets, Version ohne Installation verfügbar...


    So einen Umfang findet man in einem Produkt, welches sich in der Entwicklung befindet, für gewöhnlich nicht.

    Gut, dass du fragst.


    Deine Fragen lassen sich auch recht shcnell beantworten:


    Funktionen sind dazu gedacht mehrfach vorkommende Programmabläufe bereitzustellen. Wenn du also 2 mal das Gleiche machst, schreibe es in eine Funktion.


    Funktionen aus Funktionen aufrufen ist in der Programmierung Alltag und erfüllt durchaus seinen Sinn. In rein objektorientierten Sprachen z. B. gibt es außerhalb von Funktionen nicht mal Programmablauf.


    Einen Verbesserungsvorschlag habe ich auch noch. Und zwar handhabe ich PHP und Javascript so wie CSS, ich halte es (weitesgehend) aus dem HTML Bereich heraus. Dazu sammle ich alles, was später dynamisch ausgegeben werden soll (wie bei dir in Zeile 91 und 93,...) in Variablen und gebe diese dann mit Kontrollstrukturen im HTML Teil aus. Das sorgt so für wesentlich mehr Übersicht.

    Für andere Sprachen braucht man dann andere Plugins :)


    Den Luxus alles integriert zu haben findet man sonst nur in IDE's.


    Noch mal zu Visual Studio Code: CSS und Javascript Fehler werden dort von Haus aus angezeigt.

    Von Haus aus nicht, mit diesem Plugin aber schon.


    Bei Visual Studio Code kann man einfach auf eine php.exe (auf php.net herunterladen) verweisen.


    Andere Editoren kenne ich nur marginal, wird aber auch über Plugins gehen.

    Return ist das Gegenstück zu den Parametern. Mit den Parametern gibst du Variablen in die Funktion hinein, mit return wieder raus:


    Weil, wie bereits erklärt, das & dafür sorgt, dass in deinem Fall die Änderungen an $texte vorgenommen werden, weil $array nur auf $texte verweist. Wenn du das & weglässt verweist $array nicht auf $texte und die Funktion ändert zwar $array aber nicht $texte. Ohne & müsstest du wieder mit einem Rückgabewert arbeiten.

    So merkwürdig es klingen mag, so hat Algorithmik erstmal nicht viel mit irgendeiner Programmier- oder Skriptsprache zu tun. Viel mehr ist es die logische und mathematische Herangehensweise ein Problem zu lösen. Das dann in einer bestimmten Sprache umsetzen ist einem meistens selbst die Aufgabe. Der komplizierte Part ist also nicht PHP sondern die Logik des Ablaufes. Wenn die klar ist, kann man mit etwas Erfahrung in einer Sprache recht einfach damit arbeiten.


    Glücklicherweise muss man das alles aber auch so gut wie nie. Die meisten und wichtigsten Algorithmen werden in Standard-Bibliotheken zur Verfügung gestellt. So auch etliche Sortieralgorithmen für Arrays in PHP (siehe hier).


    Ich kenne leider auch keine größere Sammlung oder Aufbereitung verschiedener Algorithmen. Man muss immer irgendwie Ausschau halten nach dem was man gerade sucht. Wikipedia kann da oft helfen (auch wenn es teils unnötig kompliziert ist).

    1. Warum steht vor $array ein & ?


    Wir hatten weiter oben ja schon geklärt, dass beim Übergeben einer Variable an eine Funktion eine zweite Variable für die Verwendung in der Funktion erstellt wird (in Zeile 11 anfangen zu lesen):



    Durch das anlegen einer Kopie wird der Speicherbedarf für die entsprechende Variable verdoppelt. Außerdem haben Änderungen an $variable keinen Einfluss auf $text.


    Mit dem kaufmännischen Und vor dem Parameter wird jetzt keine Kopie von der übergebenen Variable erstellt, sondern es wird mit einer Referenz auf diese gearbeitet. Das ist programmiertechnisch etwas umständlicher, bietet im Zusammenhang mit Arrays aber 2 Vorteile:


    1. Es wird keine Kopie angelegt, bei sehr großen Daten (riesige Arrays z. B.) spart das viel Speicher
    2. Änderungen am Array betreffen trotzdem das Original


    Das ist auch oft eine Stolperfalle für Anfänger bei der forech Schleife. Mit der foreach Schleife kann man ein Array durchlaufen. Wenn man nun in der Schleife selbst auf jedes Element des Arrays z. B. strtoupper anwendet um alle Zeichen in Großbuchstaben zu ändern und das Array nach der Schleife verwendet, hat sich nichts geändert. Auch hier braucht man &.


    Ist jedoch nicht ganz einfach zu verstehen und in typschwachen und hardwarefernen Sprachen wie PHP und JS braucht man das äußerst selten.


    2. Was hat $desc = false für ein Nutzen?


    Du siehst die Verwendung in Zeile 9 und 10 der Funktion. Anhand der Variable wird lediglich entschieden ob aufsteigend oder absteigend sortiert wird. Das siehst du auch am Ergebnis wenn true mit übergeben wird (siehe oben):


    PHP
    1. sort_array($array1);
    2. print_r($array1); // 1, 3, 5, 7, 8, 19, 27
    3. sort_array($array1, true);
    4. print_r($array1); // 27, 19, 8, 7, 5, 3, 1


    3. Warum hast du in einer for schleife noch eine for schleife ?


    Das ist ein einfacher Algorithmus zur Sortierung (Selection Sort). Ich versuche das mal grob zu erklären.


    Die erste Schleife fängt beim 1. Element an. Dann wird direkt die zweite Schleife gestartet. Diese fängt jetzt beim n+1-ten Element an, also bei 2, arbeitet sich durch alle verbleibenden Elemente und vergleicht das 1. mit dem aktuellen. Wenn das aktuelle Element dann kleiner (oder bei umgekehrter Reihenfolge größer) ist, wird es mit dem an der ersten Stelle getauscht. Wir können dann sicher sein, dass das erste Element das kleinste Vorkommen beinhaltet. Dann endet die 2. Schleife und die 1. springt zum zweiten Element über. So geht das weiter bis zum Schluss.


    Oder einfach die Schritte für das gegebene Element. Das + zeigt die Position der ersten Schleife und das - die der zweiten. Es wird aufsteigend sortiert.



    4. Mit $i/$j < sizeof($array) tust du ja alle daten im array sammeln ?


    sizeof gibt mir die Anzahl der Elemente im Array. Wenn also die Zähl-Variable $i (in der 2. Schleife $j) die Anzahl der Elemente im Array erreicht, ist die Schleife beendet.


    5. Bei der 2. for-schleife beim if-statement [...]


    Fast. Hier findet der oben beschriebene Tausch statt. Weil man leider nicht einfach sagen kann $array[$i] soll jetzt $array[$j] beinhalten und umgekehrt, muss zwischendurch eine temporäre Variable (daher $tmp) angelegt werden um sich einen Wert zu merken. Das sieht vom Ablauf dann so aus:



    6. Hast du 2 Arrays gemacht für klein zu groß und groß zu klein ?


    Nein. Ich habe eins mit Integern und eins mit Strings erstellt. Dann das Integer-Array aufsteigend sortieren und ausgeben lassen, dann das aufsteigend sortierte Integer-Array absteigend sortieren und anzeigen lassen und dann das String-Array aufsteigend sortieren und anzeigen lassen.


    Hoffentlich konnte ich alles verständlich rüberbringen :) Ansonsten frag weiter nach, der beste Weg sich zu entwickeln!

    Soweit ich weiß, kannst du die Software dauerhaft kostenlos nutzen. Du bekommst nur nach Ablauf der Testzeit ab und zu beim Speichern ein Popup in welchem du gebeten wirst das Produkt zu erwerben, das kannst du dann einfach wegklicken.

    Ich kann dir an der Stelle noch empfelhen das Ausrufezeichen beim Vergleichen vor die Gleichheitszeichen zu setzen:


    Code
    1. !==
    2. statt
    3. ==!


    Beide Wege funktionieren, jedoch nur in diesem einen Fall. Folgende Beispiele z. B. sind fehlerhaft:


    PHP
    1. print var_dump(!true); // Ausgabe: bool(false)
    2. print var_dump(true!); // Ausgabe: Parse error: syntax error, unexpected '!'
    PHP
    1. print var_dump(true != false); // Ausgabe: bool(true)
    2. print var_dump(true =! false); // Ausgabe: Parse error: syntax error, unexpected '!'


    So kommst du später nicht durcheinander.

    Ein weiterer Punkt ist einfach, dass man Funktionen auch einfach in seperate Dateien auslagern und somit zusammenhalten kann. So findet man sie schnell wieder und braucht nicht jedes mal den kompletten Programmablauf lesen bis man sie findet.


    Meinst du die Sortierfunktion?