CINXE.COM
phpBB.de • json_decode (Userreminder, Extension Manager Plus und andere)
<!DOCTYPE html> <html dir="ltr" lang="de"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="robots" content="noindex" /> <title>phpBB.de • json_decode (Userreminder, Extension Manager Plus und andere)</title> <link href="./styles/phpBBdev1/theme/print.css" rel="stylesheet"> </head> <body id="phpbb" class="ltr"> <div id="wrap" class="wrap"> <a id="top" class="top-anchor" accesskey="t"></a> <div id="page-header"> <h1>phpBB.de</h1> <p>phpBB.de - Die deutsche phpBB-Community<br /><a href="https://www.phpbb.de/community/">https://www.phpbb.de/community/</a></p> <h2>json_decode (Userreminder, Extension Manager Plus und andere)</h2> <p><a href="https://www.phpbb.de/community/viewtopic.php?t=247529">https://www.phpbb.de/community/viewtopic.php?t=247529</a></p> </div> <div id="page-body" class="page-body"> <div class="page-number">Seite <strong>1</strong> von <strong>1</strong></div> <div class="post"> <h3>json_decode (Userreminder, Extension Manager Plus und andere)</h3> <div class="date">Verfasst: <strong>06.01.2025 21:25</strong></div> <div class="author">von <strong>IMC</strong></div> <div class="content"><em class="text-italics">edit LukeWCS:</em> abgetrennt von <a href="https://www.phpbb.de/community/viewtopic.php?t=244082" class="postlink">viewtopic.php?t=244082</a><br> <blockquote cite="./viewtopic.php?p=1429989&sid=1b27c4bf7981fc49aa5e0bc5ec2f0397#p1429989"><div><cite><a href="./memberlist.php?mode=viewprofile&u=190625&sid=1b27c4bf7981fc49aa5e0bc5ec2f0397">LukeWCS</a> hat geschrieben: <a href="./viewtopic.php?p=1429989&sid=1b27c4bf7981fc49aa5e0bc5ec2f0397#p1429989" aria-label="Zitierten Beitrag anzeigen" data-post-id="1429989" onclick="if(document.getElementById(hash.substr(1)))href=hash"><i class="icon fa-arrow-circle-up fa-fw" aria-hidden="true"></i></a><span class="responsive-hide">05.01.2025 20:10</span></cite> Wir speichern z.B. beide via JSON </div></blockquote> Ich musste mich gerade zwangsweise etwas n盲her mit JSON besch盲ftigen, da ich ein Problem mit Umlauten hatte. (Jetzt gel枚st. <img class="smilies" src="./images/smilies/icon_e_smile.gif" width="15" height="17" alt=":)" title="L盲cheln"> )<br> <br> Deshalb habe ich mir bei euch mal angeschaut wie ihr mit JSON kodierten Strings umgeht. Dabei ist mir aufgefallen, dass ihr bei <code class="inline">json_decode()</code> den zweiten Parameter nicht immer auf true setzt, um ein PHP-Array zu erzeugen. Der R眉ckgabewert von <code class="inline">json_decode()</code> wird jedoch wie ein Array behandelt. Ohne den Parameter true wird ein Objekt zur眉ckgegeben.<br> <br> Das dies ohne Probleme geht weis ich, da ich vorher den Parameter auch nicht nutzte. Jetzt nutze ich ihn um eventuellen sp盲teren Problemen vorzubeugen.</div> </div> <hr /> <div class="post"> <h3>Re: [3.2][3.3][CDB] Userreminder</h3> <div class="date">Verfasst: <strong>06.01.2025 22:14</strong></div> <div class="author">von <strong>Mike-on-Tour</strong></div> <div class="content">Hallo Thorsten,<br> geh枚rt jetzt nicht so zum Thema "Userreminder", aber gem. PHP <a href="https://www.php.net/manual/de/function.json-decode.php" class="postlink">Dokumentation</a> legt der zweite Parameter fest, ob du ein assoziatives oder ein nicht-assoziatives Array erzeugst. Die Verwendung h盲ngt also davon ab, was vorher mit <code class="inline">json_encode()</code> umgewandelt wurde.</div> </div> <hr /> <div class="post"> <h3>Re: [3.2][3.3][CDB] Userreminder</h3> <div class="date">Verfasst: <strong>06.01.2025 22:17</strong></div> <div class="author">von <strong>LukeWCS</strong></div> <div class="content">nAbend Thorsten<br> <blockquote cite="./viewtopic.php?p=1430002&sid=1b27c4bf7981fc49aa5e0bc5ec2f0397#p1430002"><div><cite><a href="./memberlist.php?mode=viewprofile&u=206428&sid=1b27c4bf7981fc49aa5e0bc5ec2f0397">IMC</a> hat geschrieben: <a href="./viewtopic.php?p=1430002&sid=1b27c4bf7981fc49aa5e0bc5ec2f0397#p1430002" aria-label="Zitierten Beitrag anzeigen" data-post-id="1430002" onclick="if(document.getElementById(hash.substr(1)))href=hash"><i class="icon fa-arrow-circle-up fa-fw" aria-hidden="true"></i></a><span class="responsive-hide">06.01.2025 21:25</span></cite> Dabei ist mir aufgefallen, dass ihr bei json_decode() den zweiten Parameter nicht immer auf true setzt, um ein PHP-Array zu erzeugen. </div></blockquote> Jupp da muss man differenzieren. Hier gehts um ein einfaches eindimensionales Array mit numerischem Index und numerischen Werten. Das wird, egal ob <code class="inline">true</code> oder <code class="inline">false</code> als zweiter Parameter, immer als Array zur眉ckgegeben, darum kann der zweite Parameter entfallen. Ganz anders sieht es aus, wenn wir ein Mapping haben, also ein assoziatives Array. Darum setze ich den zweiten Parameter bei EMP immer auf <code class="inline">true</code>, weil das nur mit assoziativen Arrays hantiert und ich da kein Objekt brauchen kann. Bei FAR lass ich den Parameter weg, weil ich da nur mit eindimensionalen Arrays mit numerischem Index hantiere und dieser Typ sowieso als Array zur眉ckgegeben wird. Vermutlich weil er nicht zu einem Objekt konvertiert werden kann.<br> <br> edit: Mike war schneller.<br> edit2: Hab das mal von UR abgetrennt, da allgemein.</div> </div> <hr /> <div class="post"> <h3>Re: json_decode (Userreminder, Extension Manager Plus und andere)</h3> <div class="date">Verfasst: <strong>06.01.2025 23:35</strong></div> <div class="author">von <strong>IMC</strong></div> <div class="content">Ich habe noch mal getestet. <div class="codebox"><p>Code: <a href="#" onclick="selectCode(this); return false;">Alles ausw盲hlen</a></p><pre><code>$json0 = json_encode(["eins"=>"eins","zwei"=>"zwei","drei"=>"drei"]); $json1 = json_encode(["eins","zwei","drei"]); var_dump(json_decode($json0)); var_dump(json_decode($json0, true)); var_dump(json_decode($json1)); var_dump(json_decode($json1, true)); </code></pre></div> Die Ausgabe: <div class="codebox"><p>Code: <a href="#" onclick="selectCode(this); return false;">Alles ausw盲hlen</a></p><pre><code>object(stdClass)#1 (3) { ["eins"]=> string(4) "eins" ["zwei"]=> string(4) "zwei" ["drei"]=> string(4) "drei" } array(3) { ["eins"]=> string(4) "eins" ["zwei"]=> string(4) "zwei" ["drei"]=> string(4) "drei" } array(3) { [0]=> string(4) "eins" [1]=> string(4) "zwei" [2]=> string(4) "drei" } array(3) { [0]=> string(4) "eins" [1]=> string(4) "zwei" [2]=> string(4) "drei" } </code></pre></div> Es ist so wie ihr es beschrieben habt. Wenn man das true bei einfachen Arrays setzt hat es keine negativen Auswirkungen.</div> </div> <hr /> <div class="post"> <h3>Re: json_decode (Userreminder, Extension Manager Plus und andere)</h3> <div class="date">Verfasst: <strong>07.01.2025 23:46</strong></div> <div class="author">von <strong>LukeWCS</strong></div> <div class="content">nAbend Thorsten, wie 眉blich zur Nachtschicht. <img class="smilies" src="./images/smilies/icon_mrgreen.gif" width="15" height="17" alt=":D" title="Mr. Green"> <br> <blockquote cite="./viewtopic.php?p=1430005&sid=1b27c4bf7981fc49aa5e0bc5ec2f0397#p1430005"><div><cite><a href="./memberlist.php?mode=viewprofile&u=206428&sid=1b27c4bf7981fc49aa5e0bc5ec2f0397">IMC</a> hat geschrieben: <a href="./viewtopic.php?p=1430005&sid=1b27c4bf7981fc49aa5e0bc5ec2f0397#p1430005" aria-label="Zitierten Beitrag anzeigen" data-post-id="1430005" onclick="if(document.getElementById(hash.substr(1)))href=hash"><i class="icon fa-arrow-circle-up fa-fw" aria-hidden="true"></i></a><span class="responsive-hide">06.01.2025 23:35</span></cite> Die Ausgabe:<br> ...<br> Es ist so wie ihr es beschrieben habt. </div></blockquote> Jupp. Aber aufgrund deiner 脺berlegung habe ich mir die Doku der Funktion nochmal genauer angeschaut. Mein damaliger Entschluss bei einfachen Arrays den zweiten Parameter nicht zu setzen, war der, das ich bei einem normalen Array ja kein assoziatives Array brauche. Jetzt kommt das Aber: Bei PHP gibt es eigentlich keine "normalen" Arrays, sondern jeder Array Typ wird immer als Mapping abgebildet. Das sieht man auch prima an deinen Dumps bez眉glich dem normalen Array, denn auch das ist ein Mapping, nur eben eines mit einem rein numerischen Schl眉ssel. Und soweit ich die Defaults der Funktion verstanden habe, liefert die Funktion immer ein Objekt zur眉ck, wenn man nicht explizit etwas anderes definiert.<br> <blockquote class="uncited"><div>Wenn man das true bei einfachen Arrays setzt hat es keine negativen Auswirkungen.</div></blockquote> Genau. Das heisst unterm Strich; korrekter/konsequenter w盲re eigentlich die konstante/explizite Verwendung des zweiten Parameters mit <code class="inline">true</code>, wenn man kein Objekt ben枚tigt, denn auch ein normales JSON kodiertes Array wird immer als Mapping (assoziatives Array) dekodiert.</div> </div> <hr /> </div> <div id="page-footer" class="page-footer"> <div class="page-number">Alle Zeiten sind <span title="Europa/Berlin">UTC+01:00</span><br />Seite <strong>1</strong> von <strong>1</strong></div> <div class="copyright"> <p>Powered by <a href="https://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Limited </p> <p>Deutsche 脺bersetzung durch <a href="https://www.phpbb.de/">phpBB.de</a> </p> </div> </div> </div> </body> </html>