1 up | 2 up |
^^^ Additional posts ^^^
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
zorg.ch
#23794 by @ 03.09.2003 09:33 - nach oben -
Ja du hast recht... hm.. mir gehen langsam die Ideen aus:
$ar1 = array ("9a", "8a", "7a", "6a", "5a", "4a", "3a", "2a", "1a");
$ar3 = array ("9c", "8c", "7c", "6c", "5c", "4c", "3c", "2c", "1c");
$ar4 = array ("9d", "8d", "7d", "6d", "09", "4d", "3d", "2d", "1d");
$ar2 = array ("9b", "8b", "7b", "6b", "5b", "4b", "3b", "2b", "1b");
$ar = array ($ar1, $ar2 , $ar3, $ar4);

$text = "array_multisort(";
for($i = 0; $i < count($ar); $i++) {
$text .= '$ar['.$i.']';
if($i < (count($ar)-1)) $text .= ', ';
if($i == 0) $text .= 'SORT_DESC, ';
}
$text .= ");";
eval($text);

gibt bei mir den gleichen output wie dein:
array_multisort($ar1,SORT_DESC,$ar2,$ar3,$ar4);
zorg.ch
#23799 by @ 03.09.2003 14:10 - nach oben -
ich habs jetzt anders gelöst. musst dir nicht mehr den kopf zerbrechen. aber trotzdem danke
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);