1
0
mirror of https://github.com/php/doc-de.git synced 2026-03-29 10:42:12 +02:00
Files
archived-doc-de/reference/array/functions/usort.xml
Oliver Albers 97a5557a9c Beispiel war fehlerhaft
git-svn-id: https://svn.php.net/repository/phpdoc/de/trunk@212672 c90b9560-bf6c-de11-be94-00142212c4b1
2006-05-08 23:14:02 +00:00

211 lines
4.7 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.11 $ -->
<!-- EN-Revision: 1.23 Maintainer: simp Status: ready -->
<!-- CREDITS: tom -->
<refentry id="function.usort">
<refnamediv>
<refname>usort</refname>
<refpurpose>
Sortiert ein Array nach Werten mittels einer benutzerdefinierten
Vergleichsfunktion.
</refpurpose>
</refnamediv>
<refsect1>
<title>Beschreibung</title>
<methodsynopsis>
<type>bool</type><methodname>usort</methodname>
<methodparam><type>array</type><parameter role="reference">array</parameter></methodparam>
<methodparam><type>callback</type><parameter>cmp_function</parameter></methodparam>
</methodsynopsis>
<para>
Diese Funktion sortiert ein Array nach seinen Werten mittels
einer benutzerdefinierten Vergleichsfunktion. Soll das Array nach
nicht trivialen Kriterien sortiert werden, sollten Sie diese
Funktion verwenden.
</para>
<para>
Die Vergleichsfunktion muss einen Integer zurückgeben, der
kleiner, gleich, oder größer ist als &null;, wenn für das erste
Argument auch angenommen wird, dass es kleiner, gleich, oder
größer ist als das zweite.
</para>
<para>
<note>
<para>
Sind zwei Elemente gleich, ist deren Reihenfolge nicht definiert. Bis zu
PHP 4.0.6 würde die benutzerdefinierte Funktion die originäre Reihenfolge
beibehalten, doch seit der Einführung des neuen Sortieralgorhythmus mit
4.1.0 ist dies nicht mehr der Fall, da es keine effiziente Lösung dafür
gibt.
</para>
</note>
</para>
&note.no-key-association;
<para>
&return.success;
</para>
<para>
<example>
<title><function>usort</function></title>
<programlisting role="php">
<![CDATA[
<?php
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort ($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
0: 1
1: 2
2: 3
3: 5
4: 6
]]>
</screen>
</example>
</para>
<note>
<para>
Offensichtlich würde <function>sort</function> für diesen
einfachen Fall besser passen.
</para>
</note>
<para>
<example>
<title>
<function>usort</function> mit einem mehrdimensionalen Array
</title>
<programlisting role="php">
<![CDATA[
<?php
function cmp($a, $b) {
return strcmp($a["fruit"], $b["fruit"]);
}
$fruits[0]["fruit"] = "Zitrone";
$fruits[1]["fruit"] = "Apfel";
$fruits[2]["fruit"] = "Traube";
usort($fruits, "cmp");
while (list ($key, $value) = each($fruits)) {
echo "\$fruits[$key]: " . $value["fruit"] . "\n";
}
?>
]]>
</programlisting>
<para>
Wird ein mehrdimensionales Array sortiert, enthalten <varname>$a</varname>
und <varname>$b</varname> Referenzen zu dem ersten Index des Arrays.
</para>
&example.outputs;
<screen>
<![CDATA[
$fruits[0]: Apfel
$fruits[1]: Traube
$fruits[2]: Zitrone
]]>
</screen>
</example>
</para>
<para>
<example>
<title>
<function>usort</function> mit Verwendung einer Member Funktion eines Objektes
</title>
<programlisting role="php">
<![CDATA[
<?php
class TestObj {
var $name;
function TestObj($name)
{
$this->name = $name;
}
/* Dies ist die statische Vergleichsfunktion: */
function cmp_obj($a, $b)
{
$al = strtolower($a->name);
$bl = strtolower($b->name);
if ($al == $bl) {
return 0;
}
return ($al > $bl) ? +1 : -1;
}
}
$a[] = new TestObj("c");
$a[] = new TestObj("b");
$a[] = new TestObj("d");
usort($a, array ("TestObj", "cmp_obj"));
foreach ($a as $item) {
echo $item->name."\n";
}
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
b
c
d
]]>
</screen>
</example>
</para>
<para>
Siehe auch <function>uasort</function>,
<function>uksort</function>, <function>sort</function>,
<function>asort</function>,
<function>arsort</function>,<function>ksort</function>,
<function>natsort</function> und <function>rsort</function>.
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->