mehrdimensionalles array sortieren fehler

Godstyle

Erfahrenes Mitglied
Huhu,

hab heute mal ein Problem mit einem Mehrdimensionalen array, die werte des array werden aus einer db geholt, ich zeige euch den wie ich denke relevanten Teil ehe ich zum Problem übergehe:

PHP:
$termin[$i] = array('user' => $row['user'], 
                  'changed'   => $row['changed'], 
                  'wann'  => $wann);

 
echo "<pre>";
	
foreach ($termin[$i] as $nr => $inhalt)
{
    $user[$nr]  = strtolower( $inhalt['user'] );
    $changed[$nr]   = strtolower( $inhalt['changed'] );
    $wann[$nr] = strtolower( $inhalt['wann'] );
}

array_multisort($wann, SORT_DESC, $termin[$i]);					
						
	print_r ( $termin[$i] );

ich habe zunächst das array nur termin[] gehabt, da kam dann das Problem auf, das er mir für jeden eintrag ein weiteres array erstellt, da die db abfrage in einer for-schleife liegt, somit habe ich um das letzte array direkt ansprechen zu können mich für $termin[$i] entschieden.

Siehe da, meine Abfrage lieferte das Richtige ergebnis.

Das Problem war an dieser Stelle, das er nach dem user sortiert hat und einen nach dem anderen mit seinen Werten ausgegeben hat, also wollte ich das array sortieren nach $wann abwärts.

Folgenden Fehler erhalte ich:

Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in

fehlerzeile :

array_multisort($wann, SORT_DESC, $termin[$i]);

hoffe die Beschreibung war ausreichend.

lg

vlt als kleiner hinweis, dieses Script in der Form, liefert die exakten werte, die ich sortieren möchte:

PHP:
$termin[$i] = array('user' => $row['user'], 
                               'changed'   => $row['changed'], 
                               'wann'  => $wann);

 
echo "<pre>";
	print_r ( $termin[$i] );
 
$nr ist keine Nummer sondern ein String ('user', 'changed', 'wann'). Das ist aber nicht der Fehler

Was soll den sortiert werden? $termin[$i] ist genau ein einziger Eintrag. und zwar derjenige, den du einige Zeilen vorher erstellt hast. Dieser eine Eintrag ist ien Array mit 3 Einträgen ('user', 'changed', 'wann').
Also, wi soll ein Eintrag sortiert werden? Er ist immer der Erste, Letzte und Einzige Eintrag.
 
Hi Yaslaw,

ich habe $nr gewählt weil ich folgendes bei meiner google suche gesehen habe:

PHP:
<?php
$termin[] = array('Datum' => 20121208, 
                  'Ort'   => "Wangen", 
                  'Band'  => "cOoL RoCk oPaS");
 
$termin[] = array('Datum' => 20120311, 
                  'Ort'   => "Stuttgart", 
                  'Band'  => "Die Hosenbodenband");
 
$termin[] = array('Datum' => 20120628, 
                  'Ort'   => "Tübingen", 
                  'Band'  => "flying socks");
 
$termin[] = array('Datum' => 20120628, 
                  'Ort'   => "Stuttgart", 
                  'Band'  => "flying socks");
 
echo "<pre>";
print_r ( $termin );
 
foreach ($termin as $nr => $inhalt)
{
    $band[$nr]  = strtolower( $inhalt['Band'] );
    $ort[$nr]   = strtolower( $inhalt['Ort'] );
    $datum[$nr] = strtolower( $inhalt['Datum'] );
}
 
array_multisort($datum, SORT_DESC, $termin);
 
print_r ( $termin );
?>

Quelle: http://www.php-kurs.com/arrays-mehrdimensional.htm


termin[$i] liefert mir folgendes ergebniss:

Code:
Array
(
    [user] => Fledermaus
    [changed] =>  hat ein neues Foto hochgeladen!
    [wann] => 1336910444
)

Array
(
    [user] => Fledermaus
    [changed] =>  hat ein neues Foto hochgeladen!
    [wann] => 1336910213
)

Array
(
    [user] => Fledermaus
    [changed] =>  hat ein neues Foto hochgeladen!
    [wann] => 1336906615
)

Array
(
    [user] => Lena
    [changed] =>  hat ein neues Foto hochgeladen!
    [wann] => 1336906792
)

Array
(
    [user] => Lena
    [changed] =>  hat ein neues Foto hochgeladen!
    [wann] => 1336906346
)

Array
(
    [user] => Lena
    [changed] =>  hat ein neues Foto hochgeladen!
    [wann] => 1336853144
)

Array
(
    [user] => Lena
    [changed] =>  hat ein neues Foto hochgeladen!
    [wann] => 1336853085
)

So jetzt stelle ich grade selbst fest, das es nicht 1 Array ist sondern mehre.

$termin [] liefert folgendes ergebniss:

Code:
Array
(
    [0] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336910444
        )

)

Array
(
    [0] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336910444
        )

    [1] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336910213
        )

)

Array
(
    [0] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336910444
        )

    [1] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336910213
        )

    [2] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336906615
        )

)

Array
(
    [0] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336910444
        )

    [1] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336910213
        )

    [2] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336906615
        )

    [3] => Array
        (
            [user] => Lena
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336906792
        )

)

Array
(
    [0] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336910444
        )

    [1] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336910213
        )

    [2] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336906615
        )

    [3] => Array
        (
            [user] => Lena
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336906792
        )

    [4] => Array
        (
            [user] => Lena
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336906346
        )

)

Array
(
    [0] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336910444
        )

    [1] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336910213
        )

    [2] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336906615
        )

    [3] => Array
        (
            [user] => Lena
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336906792
        )

    [4] => Array
        (
            [user] => Lena
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336906346
        )

    [5] => Array
        (
            [user] => Lena
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336853144
        )

)

Array
(
    [0] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336910444
        )

    [1] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336910213
        )

    [2] => Array
        (
            [user] => Fledermaus
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336906615
        )

    [3] => Array
        (
            [user] => Lena
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336906792
        )

    [4] => Array
        (
            [user] => Lena
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336906346
        )

    [5] => Array
        (
            [user] => Lena
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336853144
        )

    [6] => Array
        (
            [user] => Lena
            [changed] =>  hat ein neues Foto hochgeladen!
            [wann] => 1336853085
        )

)

davon ist das letzte mit 6 keys das richtige.

Mein ziel ist es, das ich eigentlich das letzte nach wann abwärts sortiere.

lg
 
Dann nim die Sortierung aus der Schleife raus.
Und dann sollte deine Sortierung auch wie gewünscht funktionieren (auf $temin, nicht auf $termin[$i])
 
Habe ich gemacht, ich erhalte wieder die Auswahl wo immer eine Reihe dazu kommt und nur das letzte Array stimmt, zudem ist wieder der Fehler dabei:

Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in

Ok, ich poste jetzt mal das gesamte script, inkl der schleife, vlt ist im Aufbau ja der Fehler:


PHP:
# hier sind die beiden abfragen aus der db in 1 array zusammengelegt		
$f_all = array_merge((array)$f_chk_user1, (array)$f_chk_user2);		

# f_all beinhaltet 3 verschiedene werte wonach abgefragt werden soll
for($i=0; $i<=count($f_all)-1; $i++)
{

	
		$query = mysql_query("SELECT `id`, `user`, `changed`, `userid`, `userimg`, `wann`, `new_userimg_pfad` 
					FROM `ow_login`, `f_changes`, `ow_user_data`, `ow_user_img` 
					WHERE 
						(`erstellt` = `wann` AND `img_user_id` ='$f_all[$i]' )
					AND `f_ch_userid` = `id` 
					AND `userid` = `id` 
					
					ORDER BY `wann` DESC");
		 if (!$query) {
  		  echo "Anfrage ($query) konnte nicht ausgeführt werden : " . mysql_error();
		  exit;	
		 }
		while($row = mysql_fetch_array($query)) {
				
  $termin[] = array('user'      => $row['user'], 
                    'changed'   => $row['changed'], 
                    'wann'      => $row['wann']);

 
		}
}
foreach ($termin as $nr => $row)
{
    $user[$nr]      = strtolower( $row['user'] );
    $changed[$nr]   = strtolower( $row['changed'] );
    $wann[$nr]      = strtolower( $row['wann'] );
}

array_multisort($wann, SORT_DESC, $termin);		
echo "<pre>";
	print_r ( $termin );			
		
}

Feherlmeldung im Thread hierrüber.


Alternatives script was ich eigentlich besser finde da es wesentlich weniger db abfragen hätte scheitert ebenfalls beim auslesen, hat jedoch alles in einem Array wie gewünscht:

PHP:
# hier sind die beiden abfragen aus der db in 1 array zusammengelegt		
$f_all = array_merge((array)$f_chk_user1, (array)$f_chk_user2);		

# f_all beinhaltet 3 verschiedene werte wonach abgefragt werden soll
foreach($f_all as $key => $line) {
    $wheres[] = "`img_user_id` = '$line'";
}


	
		$query = mysql_query("SELECT `id`, `user`, `changed`, `userid`, `userimg`, `wann`, `new_userimg_pfad` 
					FROM `ow_login`, `f_changes`, `ow_user_data`, `ow_user_img` 
					WHERE 
						(`erstellt` = `wann` AND ". implode(' OR', $wheres)." )
					AND `f_ch_userid` = `id` 
					AND `userid` = `id` 
					
					ORDER BY `wann` DESC");
		 if (!$query) {
  		  echo "Anfrage ($query) konnte nicht ausgeführt werden : " . mysql_error();
		  exit;	
		 }
		while($row = mysql_fetch_array($query)) {
				
  $termin[] = array('user'      => $row['user'], 
                    'changed'   => $row['changed'], 
                    'wann'      => $row['wann']);
		
		}
foreach ($termin as $nr => $row)
{
    $user[$nr]      = strtolower( $row['user'] );
    $changed[$nr]   = strtolower( $row['changed'] );
    $wann[$nr]      = strtolower( $row['wann'] );
}

array_multisort($wann, SORT_DESC, $termin);		
echo "<pre>";
	print_r ( $termin );			
		
}

Fehlermeldung hier:

Er kommt auf 119 Datensätze
 
[offtopic]
Unter den Beiträgen gibt's den "Bearbeiten"-Button, um Ergänzungen nachzureichen, anstatt mehrfach zu posten ;)
[/offtopic]
 
item: Du solltest alles in ein Query packen

item: Warum so viele Felder im SQL auswählen und nachher reduzieren? Gleich von Anfang an auf die gewünschten Felder reduzieren. Dann kannst du $row direkt übernehmen

item: Anstelle vieler OR mit den User IDs kannst du FIND_IN_SET verwenden
FIND_IN_SET(userid, '1,34,135')

PHP:
$userlist = implode(',', $f_all);
$sql = "SELECT 
			user, 
			changed,
			wann			AS wann
        FROM 
        	ow_login, 
        	f_changes, 
        	ow_user_data, 
        	ow_user_img 
        WHERE 
        	erstellt = wann 
        	AND FIND_IN_SET(img_user_id, '{$userlist}')
        	AND f_ch_userid = id 
        	AND userid = id 
		ORDER BY 
			wann DESC;";

$result = mysql_query($sql) or die "Anfrage ($sql) konnte nicht ausgeführt werden : " . mysql_error();
$termin[] = array();
$wann[] = array;
while($row = mysql_fetch_array($query)) {
	$termin[] = $row;
    $wann[]      = strtolower($row['wann']);
}

array_multisort($wann, SORT_DESC, $termin);        
echo "<pre>";
    print_r ( $termin );            
        
}
 
Wow, erstmal Herzlichen Dank,

das FIND_IN_SET kannte ich bis dato gar nicht, bin noch recht unerfahren, ich habe in der google suche nur nach "DB nach array werten durchsuchen" und ähnlichem geschaut, bin dann daraufhin auf die idee gekommen das ich irgendwie die ganzen Werte nach OR absuchen muss, so kam das zustande.

Zu deiner Anderen frage, warum soviele werte, das ist auch einfach erklärt, ich brauche diese, ich habe nur um die fehlerquelle zu minimieren immer mehr werte weg gelassen, jedoch noch beim SELECT stehen gelassen, einzig und alleine, das id war wirklich unnötig.

So, ich habe nun einen Teil von deiner Lösung und einen kleinen von meiner kombiniert und das ergebniss ist exakt das was ich wollte.

Noch einmal vielen Dank
 
$nr ist keine Nummer sondern ein String.

Sei dir da nicht sicher (normalerweise hast du recht), ABER:

PHP:
<?php foreach ($rows as $nr => $row): ?>
          <tr class="row<?php echo $nr; ?>">

ergibt die CSS-Klasse:

row0
row1
row2
row3
usw

ein "<tr class="row<?php echo $nr % 2; ?>">

ergibt:

row0
row1
row0
row1
usw.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück