letztes Komma entfernen – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self letztes Komma entfernen Tue, 28 May 19 09:05:37 Z https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749524#m1749524 https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749524#m1749524 <p>Hallo,</p> <p>wie würdet ihr das letzte Komme entfernen wenn keine weiteren Einträge mehr vorhanden sind? Muss ich hier mit einem Zähler arbeiten oder hat PHP dafür eine dafür vorgesehene Funktion?</p> <pre><code class="block language-php">if($KalenderUser > 0) { foreach($KalenderUser as $array){ ?> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span><span class="token variable">$array</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'vorname'</span><span class="token punctuation">]</span> <span class="token operator">.</span> <span class="token string double-quoted-string">" "</span> <span class="token operator">.</span> <span class="token variable">$array</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'name'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span>, <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token delimiter important">?></span></span> </code></pre> letztes Komma entfernen Tue, 28 May 19 09:39:49 Z https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749525#m1749525 https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749525#m1749525 <p>Ok, ich hab es</p> <pre><code class="block language-php">$countKalenderUser = count($KalenderUser); $i = 1; if($KalenderUser > 0) { foreach($KalenderUser as $array){ ?> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span><span class="token variable">$array</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'vorname'</span><span class="token punctuation">]</span> <span class="token operator">.</span> <span class="token string double-quoted-string">" "</span> <span class="token operator">.</span> <span class="token variable">$array</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'name'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$countKalenderUser</span> <span class="token operator">!=</span> <span class="token variable">$i</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">", "</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token delimiter important">?></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$i</span> <span class="token operator">++</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token delimiter important">?></span></span> </code></pre> letztes Komma entfernen Tue, 28 May 19 09:53:36 Z https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749527#m1749527 https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749527#m1749527 <p>Tach!</p> <blockquote> <p>wie würdet ihr das letzte Komme entfernen wenn keine weiteren Einträge mehr vorhanden sind? Muss ich hier mit einem Zähler arbeiten oder hat PHP dafür eine dafür vorgesehene Funktion?</p> </blockquote> <p>Eine Möglichkeit wäre, das Komma mit rtrim() zu entfernen. Dazu muss der String aber gesammelt und nicht sofort stückweise ausgegeben werden.</p> <p>Eine andere ist, durch eine andere Vorgehensweise es gar nicht erst zu diesem Komma kommen lassen. Ich würde ein Array erzeugen und das mit implode() zu einem String konvertieren. Dabei entstehen nur Kommas zwischen den Einträgen. Nun ist aber dein Array noch nicht direkt implodierbar. Das kann man lösen, indem man erst ein zweites Array aufbaut, für das Name und Vorname wie gewünscht zusammengebaut werden. Diese Angelegenheit kann man mit foreach lösen, aber auch funktional mit array_map(). Das überlass ich dir. foreach wird dir wohl leichter fallen.</p> <p>Nun noch was anderes:</p> <blockquote> <pre><code class="block language-php"><span class="token keyword">if</span><span class="token punctuation">(</span><span class="token variable">$KalenderUser</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$KalenderUser</span> <span class="token keyword">as</span> <span class="token variable">$array</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token operator">?</span><span class="token operator">></span> </code></pre> </blockquote> <p>Da $KalenderUser ein Array ist, ist ein Vergleich mit einem Integerwert nicht sinnvoll. PHP muss dazu das Array in einen Integerwert konvertieren, damit es da einen Vergleich anstellen kann. Es ist jedoch nicht definiert, was bei einer <a href="https://www.php.net/manual/en/language.types.integer.php#language.types.integer.casting.from-other" rel="nofollow noopener noreferrer">Konvertierung von Array nach Integer</a> passiert. Dein Konstrukt funktioniert auf diese Weise nur zufällig. Du möchtest aber eigentlich wissen, ob Elemente vorhanden sind. Das geht zwar mit count() zu zählen, aber dich interessiert die Anzahl nicht wirklich, weswegen die Zählung unnötig ist. Andererseits ist definiert, wie ein Array <a href="https://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting" rel="nofollow noopener noreferrer">in ein Boolean konvertiert</a> werden kann. Ein leeres Array ergibt false, wenn Elemente vorhanden sind ergibt es true.</p> <blockquote> <pre><code class="block language-php"><span class="token keyword">if</span><span class="token punctuation">(</span><span class="token variable">$KalenderUser</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> </code></pre> </blockquote> <p>Das wäre also gültig und ergibt was du möchtest. Aber, wenn du auf ein leeres Array foreach anwendest, passiert auch nichts. Wenn das if lediglich das foreach verhindern soll, so ist es nicht notwendig. Du brauchst es nur, wenn noch mehr als nur das foreach im if-Block steht.</p> <p>dedlfix.</p> letztes Komma entfernen Wed, 29 May 19 05:22:42 Z https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749552#m1749552 https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749552#m1749552 <blockquote> <p>wie würdet ihr das letzte Komme entfernen wenn keine weiteren Einträge mehr vorhanden sind?</p> </blockquote> <p>Sowas kann man übers Template regeln. MFG</p> letztes Komma entfernen Wed, 29 May 19 08:24:20 Z https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749555#m1749555 https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749555#m1749555 <p>Erwähnenswert: Eine weitere Möglichkeit wäre eine <a href="https://www.php.net/manual/de/control-structures.for.php" rel="nofollow noopener noreferrer">for-Schleife</a>.</p> <pre><code class="block language-php"><span class="token variable">$cnt</span> <span class="token operator">=</span> <span class="token function">count</span><span class="token punctuation">(</span><span class="token variable">$KalenderUser</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token variable">$i</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token variable">$i</span><span class="token operator"><</span><span class="token variable">$cnt</span><span class="token punctuation">;</span> <span class="token operator">++</span><span class="token variable">$i</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token operator">...</span> <span class="token punctuation">}</span> </code></pre> <p>Hier bräuchtest du dann nur prüfen, ob du dich vor dem letzten array element befindest.</p> <pre><code class="block language-php"><span class="token keyword">if</span><span class="token punctuation">(</span><span class="token variable">$i</span> <span class="token operator"><</span> <span class="token variable">$cnt</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$output</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">", "</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p><a href="https://3v4l.org/n16l3" rel="nofollow noopener noreferrer">Siehe demo auf 3v4l.org</a></p> letztes Komma entfernen Tue, 28 May 19 09:51:34 Z https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749526#m1749526 https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749526#m1749526 <p>Hallo Bernd,</p> <p>alternativ könnte man auch nach der Schleife das letzte Zeichen abschneiden:</p> <pre><code class="block language-php"> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$KalenderUser</span> <span class="token keyword">as</span> <span class="token variable">$array</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token variable">$output</span> <span class="token operator">.=</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span><span class="token variable">$array</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'vorname'</span><span class="token punctuation">]</span> <span class="token operator">.</span> <span class="token string double-quoted-string">" "</span> <span class="token operator">.</span> <span class="token variable">$array</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'name'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string double-quoted-string">","</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">echo</span> <span class="token function">substr</span><span class="token punctuation">(</span><span class="token variable">$output</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p><em>Edit Rolf B: += in .= geändert</em></p> letztes Komma entfernen Wed, 29 May 19 08:27:13 Z https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749556#m1749556 https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749556#m1749556 <p>Hallo pl,</p> <p>nicht mein Minus.</p> <blockquote> <p>...Template...</p> </blockquote> <p>Grundsätzlich ja. Wenn Du Bernd dazu bringst, Schokoladenbonbons<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> zu lutschen oder sich einen Schnurrbart<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup> wachsen zu lassen. Oder seinen Code in Business- und Templatemodule zu teilen. Bei existierender Codebasis ist das alles aufwändig.</p> <p>Wieauchimmer, die Logik, wie man das Komma nach dem letzten Eintrag weglässt, muss man auch im Template vorsehen. In Smarty z.B. so (ey, wow, das Forum kennt Smarty-Highlighting):</p> <pre><code class="block language-php"><span class="token comment">// somecode.php</span> <span class="token variable">$smarty</span><span class="token operator">-></span><span class="token function">assign</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'KalenderUser'</span><span class="token punctuation">,</span> <span class="token variable">$kalenderUser</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$smarty</span><span class="token operator">-></span><span class="token function">display</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'kalender.tpl'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <pre><code class="block language-smarty"><span class="token smarty language-smarty"><span class="token comment">{* kalender.tpl *}</span></span> <span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token keyword">foreach</span> <span class="token variable">$KalenderUser</span> as <span class="token variable">$user</span><span class="token delimiter punctuation">}</span></span> <span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token variable">$user</span><span class="token punctuation">.</span><span class="token variable">vorname</span><span class="token operator">|</span><span class="token function">escape</span><span class="token delimiter punctuation">}</span></span> <span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token variable">$user</span><span class="token punctuation">.</span><span class="token variable">name</span><span class="token operator">|</span><span class="token function">escape</span><span class="token delimiter punctuation">}</span></span><span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token keyword">if</span> <span class="token operator">not</span> <span class="token variable">$user</span>@last<span class="token delimiter punctuation">}</span></span>, <span class="token smarty language-smarty"><span class="token delimiter punctuation">{/</span><span class="token keyword">if</span><span class="token delimiter punctuation">}</span></span> <span class="token smarty language-smarty"><span class="token delimiter punctuation">{/</span><span class="token keyword">foreach</span><span class="token delimiter punctuation">}</span></span> </code></pre> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> <hr class="footnotes-sep"> <section class="footnotes"> <ol class="footnotes-list"> <li id="fn1" class="footnote-item"><p><a href="https://www.smarty.net/" rel="nofollow noopener noreferrer">Smarty</a> <a href="#fnref1" class="footnote-backref">↩︎</a></p> </li> <li id="fn2" class="footnote-item"><p><a href="https://github.com/bobthecow/mustache.php" rel="noopener noreferrer">Moustache</a> <a href="#fnref2" class="footnote-backref">↩︎</a></p> </li> </ol> </section> letztes Komma entfernen Wed, 29 May 19 08:54:59 Z https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749558#m1749558 https://forum.selfhtml.org/self/2019/may/28/letztes-komma-entfernen/1749558#m1749558 <blockquote> <blockquote> <p>...Template...</p> </blockquote> <p>Grundsätzlich ja. Wenn Du Bernd dazu bringst,</p> </blockquote> <p>Im Prinzip macht das der Bernd ja schon (Wenn man PHP als Templatesprache betrachtet). Die Idee hat er jedenfalls verstanden. MFG</p>