• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Ich raffe array_multisort net

Status
Für weitere Antworten geschlossen.

Petrus

Neues Mitglied
So ich war auf php.net um mir des anzukuken wie des geht aber habs nich wirklich verstanden also ich hab n muli array zb. $gaul[1][hippo] $gaul[1][hori] $gaul[2][hippo] $gaul[2][hori] und will jetzt dass hippo und hori im vorderen array verschoben werden und zwar nach hippo sortiert wie gesagt nur beispiele kann mir des jemand erklären wie des geht?
 
schreib mal den array in vernünftiger schreibweise vor und nach dem sortieren damit man weiss was du meinst. am besten auch noch mit simpleren keys (1,2,3,4,5/A,B,C,D,E)

vernünftige schreibweise:
Code:
Array
(
  1 => Array
  (
    'A' => 'B',
    'B' => 'A'
  ),
  2 => Array
  (
    'C' => 'D',
    'D' => 'C'
  )
)
 
PHP:
Array
(
  1 => Array
  (
    'A' => 'B',
    'B' => 'A'
  ),
  2 => Array
  (
    'A' => 'A',
    'B' => 'C'
  )
)
wenns so form sortieren aussieht soll so nachem sortieren aussehen
PHP:
Array
(
  1 => Array
  (
    'A' => 'A',
    'B' => 'C'
  ),
  2 => Array
  (
    'A' => 'B',
    'B' => 'A'
  )
)
also nach A sortirt
 
Du vertauscht doch nur 0 und 1 ? ich sehe da nichts was bei den buchstaben geändert wurde - vielleicht ein ausführlicheres Beispiel ;-) (Meins war nur ne Andeutung)
 
Du meinst das Array wird in der 1. Dimension nach den Werten der Elemente der 2. Dimension sortiert?

Code:
Array
(
  1 => Array
  (
    X => 'A',
    X => X
  ),
  2 => Array
  (
    X => 'B',
    X => 'C'
  ),
  3 => Array
  (
    X => 'B',
    X => 'D'
  ),
  4 => Array
  (
    X => 'C',
    X => X
  )
)
X = für sortierung egal.
 
die teile in x sollen aber bei ihrem x bleiben also der vom ersten x auch im ersten ix aber sonst hast du recht glaub ich
 
PHP:
function multi_sort($array1, $array2)
{
    $value1 = array_shift($array1);
    $value2 = array_shift($array2);
    if($value1 == $value2)
    {
        if(!count($array1) || !count($array2))
        {
            return 0;
        }
        else
        {
            return multi_sort($array1, $array2);
        }
    }
    else
    {
        return ($value1 > $value2)?1:-1;
    }
}
usort($array, 'multi_sort');

Das sollte eigentlich reichen ;) (nicht getestet.)
 
das war eine funktion...
die benutzt du jetzt wie jede andere funktion in php auch... du schreibst ihren namen, öffnest eine runde klammer und übergibts die parameter..

MFG
Alti
 
ja super dann weis ich immernoch nich was der für parameter braucht mom ich schick euch meinen quelli und ihr sagt mir dann wie ichs einbauen muss

EDIT:

PHP:
	//chanel
	fputs($socket, "cl\n");
	do{
	$a = 0;
	$chani = array();
	do {
      $input = fread($socket, 1);
	  if($input == "\t") $a++;
			if($input != "\n" and $input != "\r")
			{
				$chani[$a] .= $input;
				//echo $input;
			}
	} while($input != "\n");
	
	if($chani[0] != "OK") {
	$channelList[$chani[0]] = array(
      "id" => $chani[0],
      "codec" => $chani[1],
      "parent" => $chani[2],
      "order" => $chani[3],
      "maxplayers" => $chani[4],
      "name" => substr($chani[5], 2, strlen($chani[5]) - 3),
      "flags" => $chani[6],
      "passwort" => $chani[7],
      "topic" => substr($chani[8], 1, strlen($chani[8]) - 2),
      "currentplayers" => $playercount);
	  }
  } while($chani[0] != "OK");
so und die chanels sollen jetzt nach order aufsteigend sortiert werden aber ich blicks et wie

MOD-EDIT: Doppelpost zusammengefügt - Es gibt einen
edit.gif
-Button. (Artemis)
 
Zuletzt bearbeitet von einem Moderator:
Hier ein Beispiel:
PHP:
<?php
header('Content-Type: text/plain');
$array = Array
(
    1 => Array
    (
        'A' => 'B',
        'C' => 'C'
    ),
    2 => Array
    (
        'D' => 'A',
        'X' => 'V'
    ),
    3 => Array
    (
        'F' => 'B',
        'Z' => 'BZZ'
    ),
    4 => Array
    (
        'U' => 'C',
        'I' => 'A'
    )
);
echo "Vorher:\n";
var_dump($array);
function multi_sort($array1, $array2) 
{ 
    $value1 = array_shift($array1); 
    $value2 = array_shift($array2); 
    if($value1 == $value2) 
    { 
        if(!count($array1) || !count($array2)) 
        { 
            return 0; 
        } 
        else 
        { 
            return multi_sort($array1, $array2); 
        } 
    } 
    else 
    { 
        return ($value1 > $value2)?1:-1; 
    } 
} 
usort($array, 'multi_sort');
echo "Nachher:\n";
var_dump($array);
?>
Code:
Vorher:
array(4) {
  [1]=>
  array(2) {
    ["A"]=>
    string(1) "B"
    ["C"]=>
    string(1) "C"
  }
  [2]=>
  array(2) {
    ["D"]=>
    string(1) "A"
    ["X"]=>
    string(1) "V"
  }
  [3]=>
  array(2) {
    ["F"]=>
    string(1) "B"
    ["Z"]=>
    string(3) "BZZ"
  }
  [4]=>
  array(2) {
    ["U"]=>
    string(1) "C"
    ["I"]=>
    string(1) "A"
  }
}
Nachher:
array(4) {
  [0]=>
  array(2) {
    ["D"]=>
    string(1) "A"
    ["X"]=>
    string(1) "V"
  }
  [1]=>
  array(2) {
    ["F"]=>
    string(1) "B"
    ["Z"]=>
    string(3) "BZZ"
  }
  [2]=>
  array(2) {
    ["A"]=>
    string(1) "B"
    ["C"]=>
    string(1) "C"
  }
  [3]=>
  array(2) {
    ["U"]=>
    string(1) "C"
    ["I"]=>
    string(1) "A"
  }
}
Urteil: Geht ;)
 
Zuletzt bearbeitet von einem Moderator:
Es funktioniert genau so wie du es beschrieben hast. Ich habe keine Ahnung was du willst ;)
 
PHP:
function multi_sort($array1, $array2)
{
        return (($array1['order'] == $array2['order']) ? 0 : (($array1['order'] > $array2['order']) ? 1 : -1));
}
Jetzt sortiert es nur nach dem Wert des Schlüssels "order" -
Meine Güte du musst das mal vernünftig erklären...

Code:
Ich möchte ein Array in der 1. Dimension nach einem jeweiligen Wert eines bestimmten Schlüssels der 2. Dimension sortieren, der Schlüssel ist immer gleich.
Vergleich das mal mit deinen Fragen :shock:
 
ok ich blick zwar nich durch den text aber danke es funzt tut mir leid dass ich mich zu unprizise ausgedrückt hab muss mal noch n bissel mit dem quelli hantiern biss ichs raff danke an euch haupsächlich an niklasboelter

EDIT:

jetzt nur nochmal zum verständniss dass ich nich wenn ich sowas nochmal machen muss wieder fragen muss des im return kammer des mir mal erklären was des bedeutet ich komm mit den zeichen zwischendrinn nich zurecht ich weis nich was der : und des ? beudeten

MOD-EDIT: Doppelpost zusammengefügt - Es gibt einen
edit.gif
-Button - Ab dem nächten mal werden die Posts einfach gelöscht. (Artemis)


gut ich merks mir un um nich noch mehr scherereien zu krigen bedank ich mich über den beitrag nochmal
 
Zuletzt bearbeitet:
Das ist der trinäre Operator, eine Abkürzung für die if() else Kontrollstruktur.

PHP:
function multi_sort($array1, $array2) 
{ 
        return (($array1['order'] == $array2['order']) ? 0 : (($array1['order'] > $array2['order']) ? 1 : -1)); 
}
Ist das gleiche wie
PHP:
function multi_sort($array1, $array2) 
{ 
    if($array1['order'] == $array2['order'])
    {
        return 0;
    }
    else
    {
        if($array1['order'] > $array2['order'])
        {
            return 1;
        }
        else
        {
            return -1;
        }
    }
}

Ich finde ihn schön für solche einfachen sachen, für schwierige Dinge ist if() natürlich sehr viel übersichtlicher.

(Ist ne geschmackssache)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben