zorg.ch
#23774 by @ 02.09.2003 13:49 - nach oben -
ich und mein php
lage:
ich möchte die funktion array_multisort() ausführen mit mehreren arrays, wie z.b.

array_multisort(array1, array2, array3, arrayN, SORT_DESC);

problem: die anzahl an arrays, die ich sortieren möchte ist jedoch dynamisch (1 - ca. 30), d.h. ich kann die argumente der funktion nicht einmalig definieren. gibts da ne andere möglichkeit als 500 zeilen if-abfragen zu erstellen?
zorg.ch
#23775 by @ 02.09.2003 13:55 - nach oben -
Was ich am Multisort nicht schnall:
Warum macht man _einen_ Multisort, wenn die arrays eh nichts miteinander zu tun haben?
Logischer wäre diese separat zu behandeln, dann könntest du das Sortieren auch per loop machen. (Vorausgesetzt, sie sitzen selbst auch in nem Array, aber sollte ja kein Prob. sein, oder?)

Ich würds dann so machen:
foreach ($array_container_array as $array) {
array_multisort($array);
}
zorg.ch
#23776 by @ 02.09.2003 14:18 - nach oben -
ne die arrays haben was miteinander zu tun:
z.b.

array1[0] = "2"
array2[0] = "4"

nach dem sortieren ist array1[25] = "2"
und der wert "4" vom array2 muss dann auf dem offset von 25 sliegen.

die sortierung gleicht einer sortierung einer exceltabelle und mehren spalten, also die zeilen müssen unverändert bleiben sein.
zorg.ch
#23777 by @ 02.09.2003 15:35 - nach oben -
also:

$ar1 = array ("9a", "8a", "7a", "6a", "5a", "4a", "3a", "2a", "1a");
$ar2 = array ("9b", "8b", "7b", "6b", "5b", "4b", "3b", "2b", "1b");
$ar3 = array ("9c", "8c", "7c", "6c", "5c", "4c", "3c", "2c", "1c");

$ar = array ($ar1, $ar2 , $ar3);

array_multisort($ar1 , SORT_ASC , $ar2 , $ar3);

for($x = 0; $x < count($ar[0]); $x++)
{
for($i = 0; $i < count($ar); $i++)
{
echo $ar[$i][$x];
}
echo "< b r >";
$i = 0;
}

das gibt folgendes aus:

1a1b1c
2a2b2c
3a3b3c
4a4b4c
5a5b5c
6a6b6c
7a7b7c
8a8b8c
9a9b9c

ich brauch nun einen logaritmus im code, der es schnallt, wenn ein $ar4 = array ("9d", "8d", "7d", "6d", "5d", "4d", "3d", "2d", "1d") vorhanden ist, automatisch das ausgibt:

1a1b1c1d
2a2b2c2d
3a3b3c3d
4a4b4c4d
5a5b5c5d
6a6b6c6d
7a7b7c7d
8a8b8c8d
9a9b9c9d

d.h. die funktion array_multisort() mit dem argument $ar4 erweitert. (und das mehrdimensionale array $ar auch)

achtung: es muss auch funktionieren z.b. $ar2, $ar5, $ar22 und $arr23 im spiel sind und sonst keine anderen.
zorg.ch
#23779 by @ 02.09.2003 15:56 - nach oben -
Warum brauchst du multisort? Mein Code hier unten bringt den gleichen Output:

for($i = 0; $i < count($ar); $i++) {
sort($ar[$i]);
}

for($x = 0; $x < count($ar[0]); $x++)
{
for($i = 0; $i < count($ar); $i++)
{
echo $ar[$i][$x];
}
echo "< br / >";
$i = 0;
}
zorg.ch
#23781 by @ 02.09.2003 16:23 - nach oben -
jou, der milamber macht mich wiedermal glücklich...

danke, damit kann ich arbeiten
zorg.ch
#23782 by @ 02.09.2003 17:08 - nach oben -
nein doch ned, dein sort macht nicht das was ich will. du siehst es nur wenn du z.b. 5d durch 09 ersetzt.

// Array Auflistungssmethode
$ar1 = array ("9a", "8a", "7a", "6a", "5a", "4a", "3a", "2a", "1a");
$ar2 = array ("9b", "8b", "7b", "6b", "5b", "4b", "3b", "2b", "1b");
$ar3 = array ("9c", "8c", "7c", "6c", "5c", "4c", "3c", "2c", "1c");
$ar4 = array ("9d", "8d", "7d", "6d", "09", "4d", "3d", "2d", "1d");

$ar = array ($ar1, $ar2 , $ar3, $ar4);

//skaarj
array_multisort($ar1,SORT_ASC,$ar2,$ar3,$ar4);

for($x = 0; $x < count($ar[0]); $x++)
{
for($i = 0; $i < count($ar); $i++)
{
echo $ar[$i][$x];
}
echo "< br \>";
$i = 0;
}

echo "< br \>< br \>";
//milamber

for($i = 0; $i < count($ar); $i++) {
sort($ar[$i]);
}

for($x = 0; $x < count($ar[0]); $x++)
{
for($i = 0; $i < count($ar); $i++)
{
echo $ar[$i][$x];
}
echo "< br \>";
$i = 0;
}
zorg.ch
#23784 by @ 02.09.2003 17:35 - nach oben -
musst das hier machen: (also sowas in der art)

$text = "array_multisort(";
while( mehr arrays vorhanden ) {
$text .= "arrayname, ";
}
$text .= ");"

eval($text);
zorg.ch
#23786 by @ 02.09.2003 19:00 - nach oben -
ne der eval kapiert ned dass es im string ein array hat, sont hät ichs schon lange

geht:
array_multisort($ar1 , SORT_ASC , $ar2 , $ar3);

geht ned
$tmp = "array_multisort($ar1 , SORT_ASC , $ar2 , $ar3); ";
eval($tmp);
zorg.ch
#23788 by @ 02.09.2003 19:37 - nach oben -
Ich komm immer noch nicht ganz draus, hab dafür mal den gleichen output hingekriegt wie du mit:
array_multisort($ar,SORT_ASC);
for($x = 0; $x < count($ar[0]); $x++) {
for($i = 0; $i < count($ar); $i++) {
echo $ar[$i][$x];
}
echo "
";
$i = 0;
}

Hab diese Lösung schon angetönt/vermutet in meinem Post um 15:44.
zorg.ch
#23793 by @ 03.09.2003 08:34 - nach oben -
ne mach mal SORT_DESC ,

array_multisort($ar,SORT_ASC);
sortiert die einzelnen arrays im array
-----------------------------------------------
array_multisort($ar1 , SORT_ASC , $ar2 , $ar3);
sortiert die werte der arrays nach dem array $ar1
Additional posts
zorg.ch
#23780 by @ 02.09.2003 16:07 - nach oben -
blöd... in c könnte ich dir das jetzt low-levelig lösen :-)
die funktion hat eben schon eine saublöde syntax für deine ansprüche...
aber so wie milamber um 15:44 geschrieben hat, könnte es ja gehen, da php ja eh immer erst interpretiert wird...

ps: logarithmus ist was anderes.
zorg.ch
#23783 by @ 02.09.2003 17:14 - nach oben -
whatever, bbin immernoch "bastler" und ned coder
zorg.ch
#23804 by @ 03.09.2003 18:49 - nach oben -
[figg] ... SystemTechniker, nöd wohr? [/figg]
zorg.ch
#23778 by @ 02.09.2003 15:44 - nach oben -
Sorry, ich versteh das Problem nicht genau (liegt an mir).
Gehts wirklich nicht, wenn du deine Arrays in ein übergeordnetes Array stopfst, und danach mit dem arbeitest? Auf der multisort manual-Seite hats ja zb. noch rekursive array_multisorts...
Low-Tech und Runtime-Mässig könntest du das Prob wohl mit eval lösen:

$text = "array_multisort(";
while( mehr arrays vorhanden ) {
$text .= "arrayname, ";
}
$text .= ");"

eval($text);
zorg.ch
#23796 by @ 03.09.2003 11:51 - nach oben -
also mal ne frage... verstehe ich das richtig:
du willst das erste array sortieren, und in den anderen arrays sollen die gleichen vertauschungen vorgenommen werden, oder?

da könntest du dir natürlich einen eigenen algorithmus basteln...
zorg.ch
#23805 by @ 03.09.2003 18:53 - nach oben -
hm... Skaarj-ikus_php_editor_beta1.exe