tag:forum.selfhtml.org,2005:/self PHP: Multiarray umgekehrt sortieren – SELFHTML-Forum 2019-01-22T09:59:57Z https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1740984#m1740984 rekneh 2019-01-19T15:43:21Z 2019-01-19T15:43:21Z PHP: Multiarray umgekehrt sortieren <p>Hallo,</p> <p>ich möchte die gekürzte Version von Usort von (groß nach klein), umgekehrt sortieren zu (klein nach groß)</p> <pre><code class="block language-php"><span class="token function">usort</span><span class="token punctuation">(</span><span class="token variable">$final_array</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$b</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator"><=></span> <span class="token variable">$a</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Meine Idee war ja die Operatoren zu ändern in >=< aber da gab es nur eine Fehlermeldung. Kennt jemand eine Übersicht der Operatoren?</p> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1740985#m1740985 ursus contionabundo 2019-01-19T16:09:31Z 2019-01-19T16:09:56Z PHP: Multiarray umgekehrt sortieren <p>Hilft Dir das Folgende?</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'foo'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'Foo'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'Bar'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'bar'</span><span class="token punctuation">;</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token variable">$final_array</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$final_array</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$b</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator"><=></span> <span class="token variable">$a</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token variable">$final_array</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function-definition function">myusort</span><span class="token punctuation">(</span> <span class="token variable">$arr</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$arr</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$b</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator"><=></span> <span class="token variable">$a</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">array_reverse</span><span class="token punctuation">(</span> <span class="token variable">$arr</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token function">myusort</span><span class="token punctuation">(</span> <span class="token variable">$final_array</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </span></code></pre> <pre><code class="block">[Original]-Array ( [0] => Array ( [score] => foo ) [1] => Array ( [score] => Foo ) [2] => Array ( [score] => Bar ) [3] => Array ( [score] => bar ) ) [Nach Deinem usort] Array ( [0] => Array ( [score] => foo ) [1] => Array ( [score] => bar ) [2] => Array ( [score] => Foo ) [3] => Array ( [score] => Bar ) ) [Nach myusort]Array ( [3] => Array ( [score] => Bar ) [2] => Array ( [score] => Foo ) [1] => Array ( [score] => bar ) [0] => Array ( [score] => foo ) ) </code></pre> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1740986#m1740986 Rolf B 2019-01-19T16:12:36Z 2019-01-19T16:12:36Z PHP: Multiarray umgekehrt sortieren <p>Hallo rekneh,</p> <p>es gibt keinen X-Wing Operator <code>>=<</code>. Nur den Spaceship-Operator <code><=></code>.</p> <p>Aber da kommst Du selbst drauf. Überlege mal: Was liefert Dir der Spaceship-Operator, und was muss usort für eine absteigende Sortierung bekommen? Wie kannst Du das Ergebnis des Spaceship-Operatos manipulieren, um die benötigten Werte zu erhalten.</p> <p>Tipp: betrachte die Fälle a < b, a == b und a > b einzeln. Was liefert <=>, was muss usort bekommen?</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1740995#m1740995 dedlfix 2019-01-19T17:04:30Z 2019-01-19T17:04:30Z PHP: Multiarray umgekehrt sortieren <p>Tach!</p> <blockquote> <p>ich möchte die gekürzte Version von Usort von (groß nach klein), umgekehrt sortieren zu (klein nach groß)</p> <p>Meine Idee war ja die Operatoren zu ändern in >=< aber da gab es nur eine Fehlermeldung.</p> </blockquote> <p>Wie wäre es mit Ändern der Operanden?</p> <blockquote> <p>Kennt jemand eine Übersicht der Operatoren?</p> </blockquote> <p>Ja klar, gibts in vermutlich jeder Programmiersprachendokumentation, auf alle Fälle in der von PHP.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1740988#m1740988 ursus contionabundo 2019-01-19T16:24:37Z 2019-01-19T16:31:22Z Oder ... nach Rolfs Idee <p>Oder gefällt Dir Rolfs Idee (<em>"Wie kannst Du das Ergebnis des Spaceship-Operatos manipulieren, um die benötigten Werte zu erhalten."</em>) ...</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'foo'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'Foo'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'Bar'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'bar'</span><span class="token punctuation">;</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$final_array</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token number">1</span> <span class="token operator">==</span> <span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator"><=></span> <span class="token variable">$b</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token variable">$final_array</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </span></code></pre> <p>... besser?</p> <pre><code class="block">Array ( [0] => Array ( [score] => Bar ) [1] => Array ( [score] => Foo ) [2] => Array ( [score] => bar ) [3] => Array ( [score] => foo ) ) </code></pre> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1741222#m1741222 rekneh 2019-01-21T21:00:43Z 2019-01-21T21:00:43Z PHP: Multiarray umgekehrt sortieren <p>Sorry für die späte Rückmeldung. Der Trick über "array_reverse" ist super, da wäre ich nie drauf gekommen. Und ja es funktioniert.</p> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1740996#m1740996 Rolf B 2019-01-19T17:05:28Z 2019-01-19T17:06:40Z Oder ... nach Rolfs Idee <p>Hallo ursus,</p> <p>dir fällt aber schon auf, dass dein Sortierergebnis aufsteigend ist statt absteigend? Das war nicht das Ziel. Abgesehen davon ist <code>1 == ...</code> definitiv der falsche Ansatz, um mit einer dreiwertigen Situation umzugehen.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1740997#m1740997 Rolf B 2019-01-19T17:08:30Z 2019-01-19T17:08:38Z PHP: Multiarray umgekehrt sortieren <p>Hallo dedlfix,</p> <p>ich bin mal nicht so: <a href="http://php.net/manual/de/language.operators.php" rel="noopener noreferrer">http://php.net/manual/de/language.operators.php</a></p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1740998#m1740998 ursus contionabundo 2019-01-19T17:38:13Z 2019-01-19T17:47:21Z Oder ... nach Rolfs Idee <p>Ich dachte, er will zuerst Großbuchstaben. Du meinst, er will:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'bar'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'Foo'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'Bar'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'foo'</span><span class="token punctuation">;</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$final_array</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'"'</span> <span class="token operator">.</span> <span class="token variable">$a</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'" <=> "'</span> <span class="token operator">.</span> <span class="token variable">$b</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'" : '</span> <span class="token operator">.</span> <span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator"><=></span> <span class="token variable">$b</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string single-quoted-string">' => '</span> <span class="token operator">.</span> <span class="token punctuation">(</span> <span class="token operator">-</span><span class="token number">1</span> <span class="token operator">*</span> <span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator"><=></span> <span class="token variable">$b</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span> <span class="token operator">*</span> <span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator"><=></span> <span class="token variable">$b</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token variable">$final_array</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </span></code></pre> <p>mit diesem Ergebnis?</p> <pre><code class="block">"bar" <=> "Foo" : 1 => -1 "Foo" <=> "Bar" : 1 => -1 "Bar" <=> "foo" : -1 => 1 "Foo" <=> "foo" : -1 => 1 "bar" <=> "foo" : -1 => 1 Array ( [0] => Array ( [score] => foo ) [1] => Array ( [score] => bar ) [2] => Array ( [score] => Foo ) [3] => Array ( [score] => Bar ) ) </code></pre> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1741048#m1741048 MudGuard http://www.andreas-waechter.de/ 2019-01-20T14:38:14Z 2019-01-20T14:38:14Z Oder ... nach Rolfs Idee <p>Hi,</p> <blockquote> <p>dir fällt aber schon auf, dass dein Sortierergebnis aufsteigend ist statt absteigend? Das war nicht das Ziel. Abgesehen davon ist <code>1 == ...</code> definitiv der falsche Ansatz, um mit einer dreiwertigen Situation umzugehen.</p> </blockquote> <p>der dritte Wert kommt aber nur zum Tragen, wenn im Array identische Werte vorhanden wären.</p> <p>Und selbst dann wäre es bei einfachen Werten (die praktisch nur aus dem Key bestehen, nachdem sortiert wird) egal. Denn ob Du 1, 1, 2, 3 hast oder 1, 1, 2, 3 ist relativ egal.</p> <p>Relevant wird das erst, wenn an dem Sortier-Key noch andere Daten dranhängen.</p> <p>cu,<br> Andreas a/k/a MudGuard</p> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1741003#m1741003 Rolf B 2019-01-20T09:48:29Z 2019-01-20T09:48:29Z Oder ... nach Rolfs Idee <p>Hallo ursus,</p> <p>nein, sorry, du hattest recht. Gesucht ist Bar, Foo, bar, foo.</p> <p>Trotzdem verstehe ich noch nicht, warum <code>1==($a<=>$b)</code> die Aufgabenstellung löst.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1741046#m1741046 ursus contionabundo 2019-01-20T14:27:30Z 2019-01-20T14:42:39Z Oder ... nach Rolfs Idee <blockquote> <p>nein, sorry, du hattest recht. Gesucht ist Bar, Foo, bar, foo.</p> </blockquote> <p>Sicher bin ich mir da gar nicht. Die Aufgabestellung ist durchaus mehrdeutig und Rekneh hat sich im Forum nicht gemeldet um das klarzustellen.</p> <blockquote> <p>Trotzdem verstehe ich noch nicht, warum 1==($a<=>$b) die Aufgabenstellung löst.</p> </blockquote> <p>Da bin ich bei Dir. Auch meine Tests lassen mich mit dem Rätsel zurück, WARUM das geht. (<strong>Insofern kann ich Vorgehen nicht ernsthaft empfehlen!</strong>) Auch die Ausgaben geben mir keine wirkliche Hilfe.</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'foo'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'quirx'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'Quirx'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'Bar'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'bar'</span><span class="token punctuation">;</span> <span class="token variable">$final_array</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'Foo'</span><span class="token punctuation">;</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$final_array</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'"'</span> <span class="token operator">.</span> <span class="token variable">$a</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'" <=> "'</span> <span class="token operator">.</span> <span class="token variable">$b</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'" : '</span> <span class="token operator">.</span> <span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator"><=></span> <span class="token variable">$b</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string single-quoted-string">' => '</span> <span class="token operator">.</span> <span class="token punctuation">(</span><span class="token keyword type-casting">int</span><span class="token punctuation">)</span><span class="token punctuation">(</span> <span class="token number">1</span> <span class="token operator">==</span> <span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator"><=></span> <span class="token variable">$b</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token keyword type-casting">int</span><span class="token punctuation">)</span><span class="token number">1</span> <span class="token operator">==</span> <span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token operator"><=></span> <span class="token variable">$b</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'score'</span><span class="token punctuation">]</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token variable">$final_array</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </span></code></pre> <pre><code class="block">"foo" <=> "quirx" : -1 => 0 "quirx" <=> "Quirx" : 1 => 1 "foo" <=> "Quirx" : 1 => 1 "quirx" <=> "Bar" : 1 => 1 "foo" <=> "Bar" : 1 => 1 "Quirx" <=> "Bar" : 1 => 1 "quirx" <=> "bar" : 1 => 1 "foo" <=> "bar" : 1 => 1 "Quirx" <=> "bar" : -1 => 0 "quirx" <=> "Foo" : 1 => 1 "foo" <=> "Foo" : 1 => 1 "bar" <=> "Foo" : 1 => 1 "Quirx" <=> "Foo" : 1 => 1 "Bar" <=> "Foo" : -1 => 0 Array ( [0] => Array ( [score] => Bar ) [1] => Array ( [score] => Foo ) [2] => Array ( [score] => Quirx ) [3] => Array ( [score] => bar ) [4] => Array ( [score] => foo ) [5] => Array ( [score] => quirx ) ) </code></pre> <p>Ich habe keinen Fehler provozieren können. Auch mit dem ganz großen Test nicht:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$ar</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'foo'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'qix'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Bar'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Qix'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'bar'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Foo'</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$sorted</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'Bar'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Foo'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Qix'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'bar'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'foo'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'qix'</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$z</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token punctuation">(</span> <span class="token variable">$z</span> <span class="token operator"><</span> <span class="token number">1000</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">shuffle</span><span class="token punctuation">(</span> <span class="token variable">$ar</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"># Array oft genug mixen statt nachdenken...</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">myUsort</span><span class="token punctuation">(</span> <span class="token variable">$ar</span> <span class="token punctuation">)</span> <span class="token operator">!=</span> <span class="token variable">$sorted</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token variable">$ar</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">echo</span> <span class="token variable">$z</span><span class="token operator">++</span> <span class="token operator">.</span> <span class="token string single-quoted-string">' '</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">function</span> <span class="token function-definition function">myUsort</span><span class="token punctuation">(</span> <span class="token variable">$ar</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$ar</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">/* echo '"' . $a . '" <=> "' . $b . '" : ' . ( $a <=> $b ) . ' => ' . (int)( 1 == ( $a <=> $b ) ) . PHP_EOL; */</span> <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token keyword type-casting">int</span><span class="token punctuation">)</span><span class="token number">1</span> <span class="token operator">==</span> <span class="token punctuation">(</span> <span class="token variable">$a</span> <span class="token operator"><=></span> <span class="token variable">$b</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$ar</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </span></code></pre> <p>Theoretisch sorgt usort nur dann für eine Umsortierung, wenn das Return der aufgerufenen Funktion 1 ist. Bei 0 und -1 macht usort gar nichts. Ich hab das mit allem möglichen Zeug probiert:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$or</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string double-quoted-string">"Bar"</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"foo"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$ar</span> <span class="token operator">=</span> <span class="token variable">$or</span><span class="token punctuation">;</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$ar</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</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 class="token interpolation"><span class="token variable">$a</span></span>, <span class="token interpolation"><span class="token variable">$b</span></span>"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">return</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 punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'-1: '</span> <span class="token operator">.</span> <span class="token function">implode</span> <span class="token punctuation">(</span><span class="token string single-quoted-string">', '</span><span class="token punctuation">,</span> <span class="token variable">$ar</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token comment"># Bar, foo</span> <span class="token comment"># -1: Bar, foo</span> <span class="token variable">$ar</span> <span class="token operator">=</span> <span class="token variable">$or</span><span class="token punctuation">;</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$ar</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</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 class="token interpolation"><span class="token variable">$a</span></span>, <span class="token interpolation"><span class="token variable">$b</span></span>"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">' 0: '</span> <span class="token operator">.</span> <span class="token function">implode</span> <span class="token punctuation">(</span><span class="token string single-quoted-string">', '</span><span class="token punctuation">,</span> <span class="token variable">$ar</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token comment"># Bar, foo</span> <span class="token comment"># 0: Bar, foo</span> <span class="token variable">$ar</span> <span class="token operator">=</span> <span class="token variable">$or</span><span class="token punctuation">;</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$ar</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</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 class="token interpolation"><span class="token variable">$a</span></span>, <span class="token interpolation"><span class="token variable">$b</span></span>"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">' 1: '</span> <span class="token operator">.</span> <span class="token function">implode</span> <span class="token punctuation">(</span><span class="token string single-quoted-string">', '</span><span class="token punctuation">,</span> <span class="token variable">$ar</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token comment"># Bar, foo</span> <span class="token comment"># 1: foo, Bar</span> </span></code></pre> <p>So lange ich von einem klügeren nichts besseres erfahre (die Dokumentation sagt gar nichts!) Denke ich: "Hm. Entweder ein Bug oder ein Easteregg.". Ich habe auch schon erfolgsfrei nach "usort" in C und CPP gesucht, weil PHP manche Standard-Funktionen von C/CPP nur zu "wrappen" scheint.</p> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1741223#m1741223 Rolf B 2019-01-21T21:41:47Z 2019-01-21T21:41:47Z Oder ... nach Rolfs Idee <p>Hallo ursus,</p> <p><strong>patsch</strong> - meine Stirn ist jetzt etwas flacher.</p> <p>Fazit: sehe ich auch so, usort behandelt -1 und 0 gleich. Das passt auch zu den üblichen Sortieralgorithmen, die entscheiden binär auf "tauschen" oder "nicht tauschen". Weil <code>$a<=>$b == 1</code> bedeutet, dass <code>$a > $b</code> ist, ist nur dann eine Fehlstellung im Array vorhanden, die einen Tausch erfordert. Typischer Fall von DUH!</p> <p>Der Witz ist nur: Es ändert gar nichts. Ob man <code>$a <=> $b</code> oder <code>1 == ($a <=> $b)</code> verwendet - die Sortierreihenfolge ist gleich. Erst die Großbuchstaben, dann die Kleinbuchstaben. Aufsteigende Sortierung gemäß ASCII-Code. Mit <code>$b <=> $a</code> oder <code>-($a <=> $b)</code> erhält man absteigende Sortierung nach Ascii-Code.</p> <p>Aber was will unser Rückwärtshenker nun eigentlich? Der array_reverse hat geholfen? D.h. die von einem usort gelieferte Sortierung wird gespiegelt? Das ist nun eigentlich zu aufwändig, es sei denn die usort-Sortierung liegt aus anderen Gründen eh schon vor. Wenn man mit usort aufsteigend sortiert und dann reversiert, ist es wohl besser, gleich absteigend zu sortieren. Wie das geht - siehe oben.</p> <p>Mein Gedanke war ja die ganze Zeit, dass alphabetisch sortiert werden sollte, aber mit den kleinbuchstaben vor den GROSSbuchstaben (sozusagen native EBCDIC Reihenfolge). Und das sähe ganz anders aus.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1741224#m1741224 Rolf B 2019-01-21T21:48:31Z 2019-01-21T21:51:49Z Oder ... nach Rolfs Idee <p>Hallo MudGuard,</p> <p>ja, hab ich mit einem zweiten Key im Array ausprobiert. usort zeigt bei kleinen Arrays ein stabiles Verhalten, d.h. die Elemente blieben bei einer Rückgabe von -1 oder 0 in ihrer Ursprungsreihenfolge. Bei einem etwas größeren Array wurde dann durcheinandergewürfelt, offenbar wechselt usort dann den Algorithmus.</p> <p>Und war jedesmal egal, ob ich $a <=> $b oder ($a<=>$b)==1 verwendete.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1741276#m1741276 ursus contionabundo 2019-01-22T09:59:57Z 2019-01-22T09:59:57Z PHP: Multiarray umgekehrt sortieren <blockquote> <p>Sorry für die späte Rückmeldung. Der Trick über "array_reverse" ist super, da wäre ich nie drauf gekommen. Und ja es funktioniert.</p> </blockquote> <p><a href="https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1741275#m1741275" rel="noopener noreferrer">Leider heizt der auch die Gegend unnötig auf. Das geht klimafreundlicher!</a>.</p> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1741229#m1741229 Matthias Apsel matthias.apsel@selfhtml.org https://brückentage.info 2019-01-22T06:00:27Z 2019-01-22T06:00:27Z Oder ... nach Rolfs Idee <p>Hallo Rolf B,</p> <blockquote> <p>Typischer Fall von DUH!</p> </blockquote> <p>Was bedeutet „DUH!“? <em lang="en">D'oh!</em>?</p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Pantoffeltierchen haben keine Hobbys. </div> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1741275#m1741275 ursus contionabundo 2019-01-22T09:58:19Z 2019-01-22T09:58:19Z Ich weiß, warum der letzte Sommer so heiß war... <blockquote> <p>patsch - meine Stirn ist jetzt etwas flacher.</p> </blockquote> <p>Meine auch. Das <code>1 == ( $a <=> $b )</code> bringt bei usort natürlich nichts. Aber statt array_reverse() nachträglich anzuwenden kann man die Paare tauschen - und vor allem auf einen billigeren Vergleich zurückgreifen. Auch wenn das erst bei ein paar tausend Items fühlbar wird: Wir wollen ja nicht das Rechenzentrum heizen um es dann wieder aufwendig zu kühlen. (Ich weiß, warum der letzte Sommer so heiß war...)</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$arO</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'foo'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'qix'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Bar'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Qix'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'bar'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Foo'</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$arC</span> <span class="token operator">=</span> <span class="token variable">$arO</span><span class="token punctuation">;</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$arC</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$a</span> <span class="token operator"><=></span> <span class="token variable">$b</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'-------------------------------'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'Normaler Vergleich:'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">' $a <=> $b'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'-------------------------------'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token function">implode</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">', '</span><span class="token punctuation">,</span> <span class="token variable">$arC</span> <span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token variable">$arC</span> <span class="token operator">=</span> <span class="token variable">$arO</span><span class="token punctuation">;</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$arC</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token number">1</span> <span class="token operator">==</span> <span class="token punctuation">(</span> <span class="token variable">$a</span> <span class="token operator"><=></span> <span class="token variable">$b</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'-------------------------------'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'Ausschluss von -1 als Return:'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'1 == ( $a <=> $b )'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'-------------------------------'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token function">implode</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">', '</span><span class="token punctuation">,</span> <span class="token variable">$arC</span> <span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token variable">$arC</span> <span class="token operator">=</span> <span class="token variable">$arO</span><span class="token punctuation">;</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$arC</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$b</span> <span class="token operator"><=></span> <span class="token variable">$a</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'-------------------------------'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'Spaceship mit Reverse-Params:'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">' $b <=> $a'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'-------------------------------'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token function">implode</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">', '</span><span class="token punctuation">,</span> <span class="token variable">$arC</span> <span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token variable">$arC</span> <span class="token operator">=</span> <span class="token variable">$arO</span><span class="token punctuation">;</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$arC</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span> <span class="token operator">*</span> <span class="token punctuation">(</span> <span class="token variable">$a</span> <span class="token operator"><=></span> <span class="token variable">$b</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'-------------------------------'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'Multiplikation mit -1:'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">' -1 * ( $a <=> $b )'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'-------------------------------'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token function">implode</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">', '</span><span class="token punctuation">,</span> <span class="token variable">$arC</span> <span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token variable">$arC</span> <span class="token operator">=</span> <span class="token variable">$arO</span><span class="token punctuation">;</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$arC</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token keyword type-casting">int</span><span class="token punctuation">)</span><span class="token punctuation">(</span> <span class="token variable">$a</span> <span class="token operator">></span> <span class="token variable">$b</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'-------------------------------'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'Einfacher Vergleich'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">' (int)$a > $b'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'-------------------------------'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token function">implode</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">', '</span><span class="token punctuation">,</span> <span class="token variable">$arC</span> <span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token variable">$arC</span> <span class="token operator">=</span> <span class="token variable">$arO</span><span class="token punctuation">;</span> <span class="token function">usort</span><span class="token punctuation">(</span> <span class="token variable">$arC</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span> <span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token keyword type-casting">int</span><span class="token punctuation">)</span><span class="token punctuation">(</span> <span class="token variable">$a</span> <span class="token operator"><</span> <span class="token variable">$b</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'-------------------------------'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'Einfacher Vergleich, reverse'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">' (int)$a < $b'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'-------------------------------'</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token function">implode</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">', '</span><span class="token punctuation">,</span> <span class="token variable">$arC</span> <span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> </span></code></pre> <p>Ausgaben:</p> <pre><code class="block">------------------------------- Normaler Vergleich: $a <=> $b ------------------------------- Bar, Foo, Qix, bar, foo, qix ------------------------------- Ausschluss von -1 als Return: 1 == ( $a <=> $b ) ------------------------------- Bar, Foo, Qix, bar, foo, qix ------------------------------- Spaceship mit Reverse-Params: $b <=> $a ------------------------------- qix, foo, bar, Qix, Foo, Bar ------------------------------- Multiplikation mit -1: -1 * ( $a <=> $b ) ------------------------------- qix, foo, bar, Qix, Foo, Bar ------------------------------- Einfacher Vergleich (int)$a > $b ------------------------------- Bar, Foo, Qix, bar, foo, qix ------------------------------- Einfacher Vergleich, reverse (int)$a < $b ------------------------------- qix, foo, bar, Qix, Foo, Bar </code></pre> <p><strong>Am billigsten ist also die letzte Methode.</strong></p> https://forum.selfhtml.org/self/2019/jan/19/php-multiarray-umgekehrt-sortieren/1741235#m1741235 Rolf B 2019-01-22T06:45:30Z 2019-01-22T06:45:30Z Oder ... nach Rolfs Idee <p>Hallo Matthias,</p> <p>ich hatte das in diversen Geschichten gelesen ohne eine Übersetzung zu haben. D'oh musste ich jetzt erstmal suchen. Es gibt bei <a href="https://dict.leo.org/forum/viewWrongentry.php?idforum=6&idThread=254093&lp=ende#followup=4" rel="nofollow noopener noreferrer">dict.Leo.org</a> Eine Diskussion, nach der das das gleiche ist. D'oh wäre dann die formalisierte Variante.</p> <p>Mit der Bedeutung lag ich aber richtig: „Was für eine blöde Frage“...</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div>