Php Array Problem

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von orgertot.

    Php Array Problem

    Hallo,
    bei dem nachfolgendem Code kommt dieser Fehler:

    Quellcode

    1. Warning: array_multisort() [function.array-multisort]: Array sizes are inconsistent in /var/www/web16/html/ticker-news/ville/php/nachrichten.php on line 90

    Zeile 90 wäre in diesem Fall, Zeile 59. Wenn ich eins der multisorts rausnehme, funktioniert es auch. Aber wenn ich die beiden nehme, wird der Fehler angezeigt und das zweite multisort wird nicht ausgeführt.
    Wie kann ich dieses Problem lösen?
    Danke :love:

    PHP-Quellcode

    1. <? $sql = "SELECT * FROM `xx` WHERE `sender` = BINARY '".$name."' ORDER BY `sender` DESC,`zeit` DESC";
    2. $result=mysql_query($sql);
    3. $row_count1 = mysql_num_rows($result);
    4. while($row = mysql_fetch_array($result)) {
    5. //echo "Gesendet: ".$row['empfaenger']." - ";
    6. $zeit = date("H:i - d.m.Y",$row['zeit']);
    7. $termin[] = array('Sender' => $row['empfaenger'],
    8. 'Empfaenger' => $row['sender'],
    9. 'Nachricht' => $row['text'],
    10. 'Zeit' => $zeit,
    11. 'id' => $row['id'],
    12. 'orginal' => "1",
    13. 'Abstand' => "<br>");
    14. }
    15. //Nur als Empfänger!
    16. $sql = "SELECT * FROM `xx` WHERE `empfaenger` = BINARY '".$name."' ORDER BY `sender` DESC,`zeit` DESC";
    17. $result=mysql_query($sql);
    18. $row_count2 = mysql_num_rows($result);
    19. while($row = mysql_fetch_array($result)) {
    20. //echo "Empfangen: ".$row['sender']."<br>";
    21. $zeit = date("H:i - d.m.Y",$row['zeit']);
    22. $termin[] = array('Sender' => $row['sender'],
    23. 'Empfaenger' => $row['empfaenger'],
    24. 'Nachricht' => $row['text'],
    25. 'Zeit' => $zeit,
    26. 'id' => $row['id'],
    27. 'orginal' => "2",
    28. 'Abstand' => "<br>");
    29. }
    30. foreach ($termin as $key => $row) {
    31. $zeit_sort[$key] = $row['Zeit'];
    32. $name_sort[$key] = $row['Sender'];
    33. }
    34. array_multisort($name_sort, SORT_ASC,$zeit_sort, SORT_DESC, $termin);
    35. if($row_count1==0 AND $row_count2==0) { echo "Keine Nachrichten vorhanden"; } else {
    36. //Prüfen, ob der Sender schon 2x vorhanden ist, wenn nicht, dann letztes Anzeigen
    37. $lastname = "";
    38. $versteckt = 0;
    39. for($i=0; $i < count($termin); $i++)
    40. {
    41. if($lastname == $termin[$i]['Sender'] AND $lastname !="")
    42. {
    43. //array_splice($termin, $i, $i); <-- Rausgenommen, kommt zu fehlern. Muss nicht entfernt werden, nur nicht angezeigt.
    44. }
    45. else {
    46. $lastname = $termin[$i]['Sender'];
    47. $termin2[] = array('Sender2' => $termin[$i]['Sender'],
    48. 'Empfaenger2' => $termin[$i]['Empfaenger'],
    49. 'Nachricht2' => $termin[$i]['Nachricht'],
    50. 'Zeit2' => $termin[$i]['Zeit']);
    51. $versteckt++;
    52. }
    53. }
    54. foreach ($termin2 as $key => $row) {
    55. $zeit_sort[$key] = $row['Zeit2'];
    56. $name_sort[$key] = $row['Sender2'];
    57. }
    58. array_multisort($zeit_sort, SORT_DESC, $name_sort, SORT_ASC, $termin2);
    59. for($i=0; $i < count($termin2); $i++)
    60. {
    61. $sql5 = "SELECT * FROM `main` WHERE `username` = BINARY '".$termin2[$i]['Sender2']."'";
    62. $result5=mysql_query($sql5);
    63. $row5 = mysql_fetch_array($result5);
    64. $avatar = $row5['avatar'];
    65. $sender2 = $termin2[$i]['Sender2'];
    66. $id = $termin2[$i]['id'];
    67. $orginal = $termin2[$i]['orginal2'];
    68. $lastmessage = $termin2[$i]['Nachricht2'];?>
    69. <div id="message_form">
    70. <div id="message_left"><a href="?site=nachrichten&view&id=<? echo $sender2; ?>"><img src="uploads/thumb_<? echo $avatar; ?>"></a></div>
    71. <div id="message_right">
    72. <div id="message_sender"><? echo $sender2; ?></div>
    73. <div id="message_last" class="punktab"><? echo $lastmessage; ?></div>
    74. </div>
    75. </div>
    76. <?
    77. }?>
    Wenn ich mich jetzt nicht täusche müsste das daran liegen, dass du an die sowieso schon vorhandenen Arrays $zeit_sort und $name_sort bei der vorherigen foreach-Schleife neue Elemente von $termin2 dranhängst, und die somit länger als $termin2 sind. Du müsstest sie doch vor dem neuen Belegen erst leeren, oder?
    Ah stimmt! Warte mal kurz..

    Ok: Ich habe es jetzt einfach mit unset geleert. Der Fehler ist weg, aber der 2 mutlisort sortiert jetzt nicht mehr..

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „orgertot“ ()

    Ich habe diese Funktion noch nie verwendet. Weiß nicht warum sie nicht sortiert, musst du halt ein bisschen rumprobieren und schauen, ob es vorher richtig belegt ist, ob es danach nicht sortiert ist etc., immer die richtigen Arrays genutzt hast... Mehr kann ich auch nicht tun ^^
    Mh.. Ok.. Wie würdest du das denn lösen? Es gibt doch auch bei den Mysqlsachen Left Join.. Das habe ich aber noch nie gemacht und verstehen tue ich das auch iwie nicht :D
    Könnte man damit nich die Sachen auslesen, was ich hier in Zeile 1-29 machen, bloß in einer mysql abfrage?
    zeit_sort:
    array(4) { [0]=> string(18) "11:53 - 25.02.2012" [1]=> string(18) "11:53 - 25.02.2012" [2]=> string(18) "19:46 - 23.02.2012" [3]=> string(18) "19:48 - 23.02.2012" }

    name_sort:
    array(4) { [0]=> string(6) "Test 2" [1]=> string(7) "Test! 1" [2]=> string(2) "sa" [3]=> string(4) "test" }

    Das stimmt alles, aber iwie funktioniert jetzt mein 2-tes multisort nicht mehr.. Hier nochmal mein kompletter code:

    PHP-Quellcode

    1. <?
    2. echo '<form action="?site=nachrichten&new=0" method="post" style="right:5px;top:7px; position:relative;"><input type="submit" value="Neue Nachricht"/></form>';
    3. echo '<hr>';
    4. //Nur als Sender!
    5. $sql = "SELECT * FROM `nachrichten` WHERE `sender` = BINARY '".$name."' ORDER BY `sender` DESC,`zeit` DESC";
    6. $result=mysql_query($sql);
    7. $row_count1 = mysql_num_rows($result);
    8. while($row = mysql_fetch_array($result)) {
    9. //echo "Gesendet: ".$row['empfaenger']." - ";
    10. $zeit = date("H:i - d.m.Y",$row['zeit']);
    11. $termin[] = array('Sender' => $row['empfaenger'],
    12. 'Empfaenger' => $row['sender'],
    13. 'Nachricht' => $row['text'],
    14. 'Zeit' => $zeit,
    15. 'id' => $row['id'],
    16. 'orginal' => "1",
    17. 'Abstand' => "<br>");
    18. }
    19. //Nur als Empfänger!
    20. $sql = "SELECT * FROM `nachrichten` WHERE `empfaenger` = BINARY '".$name."' ORDER BY `sender` DESC,`zeit` DESC";
    21. $result=mysql_query($sql);
    22. $row_count2 = mysql_num_rows($result);
    23. while($row = mysql_fetch_array($result)) {
    24. //echo "Empfangen: ".$row['sender']."<br>";
    25. $zeit = date("H:i - d.m.Y",$row['zeit']);
    26. $termin[] = array('Sender' => $row['sender'],
    27. 'Empfaenger' => $row['empfaenger'],
    28. 'Nachricht' => $row['text'],
    29. 'Zeit' => $zeit,
    30. 'id' => $row['id'],
    31. 'orginal' => "2",
    32. 'Abstand' => "<br>");
    33. }
    34. foreach ($termin as $key => $row) {
    35. $zeit_sort[$key] = $row['Zeit'];
    36. $name_sort[$key] = $row['Sender'];
    37. }
    38. array_multisort($name_sort, SORT_ASC,$zeit_sort, SORT_DESC, $termin);
    39. if($row_count1==0 AND $row_count2==0) { echo "Keine Nachrichten vorhanden"; } else {
    40. //Prüfen, ob der Sender schon 2x vorhanden ist, wenn nicht, dann letztes Anzeigen
    41. $lastname = "";
    42. $versteckt = 0;
    43. for($i=0; $i < count($termin); $i++)
    44. {
    45. if($lastname == $termin[$i]['Sender'] AND $lastname !="")
    46. {
    47. //array_splice($termin, $i, $i); <-- Rausgenommen, kommt zu fehlern. Muss nicht entfernt werden, nur nicht angezeigt.
    48. }
    49. else {
    50. $lastname = $termin[$i]['Sender'];
    51. $termin2[] = array('Sender2' => $termin[$i]['Sender'],
    52. 'Empfaenger2' => $termin[$i]['Empfaenger'],
    53. 'Nachricht2' => $termin[$i]['Nachricht'],
    54. 'Zeit2' => $termin[$i]['Zeit']);
    55. $versteckt++;
    56. }
    57. }
    58. unset($zeit_sort);
    59. unset($name_sort);
    60. foreach ($termin2 as $key => $row) {
    61. $zeit_sort[$key] = $row['Zeit2'];
    62. $name_sort[$key] = $row['Sender2'];
    63. }
    64. var_dump($name_sort);
    65. array_multisort($zeit_sort, SORT_DESC, $termin2);
    66. for($i=0; $i < count($termin2); $i++)
    67. {
    68. $sql5 = "SELECT * FROM `main` WHERE `username` = BINARY '".$termin2[$i]['Sender2']."'";
    69. $result5=mysql_query($sql5);
    70. $row5 = mysql_fetch_array($result5);
    71. $avatar = $row5['avatar'];
    72. $sender2 = $termin2[$i]['Sender2'];
    73. $id = $termin2[$i]['id'];
    74. $orginal = $termin2[$i]['orginal2'];
    75. $lastmessage = $termin2[$i]['Nachricht2'];?>
    76. <div id="message_form">
    77. <div id="message_left"><a href="?site=nachrichten&view&id=<? echo $sender2; ?>"><img src="uploads/thumb_<? echo $avatar; ?>"></a></div>
    78. <div id="message_right">
    79. <div id="message_sender"><? echo $sender2; ?></div>
    80. <div id="message_last" class="punktab"><? echo $lastmessage; ?></div>
    81. </div>
    82. </div>
    83. <?
    84. }
    85. }
    86. }
    87. ?>
    Termin2:

    Quellcode

    1. array(4) { [0]=> array(4) {
    2. ["Sender2"]=> string(6) "Test 2" ["Empfaenger2"]=> string(4) "test" ["Nachricht2"]=> string(6) "Hallo!" ["Zeit2"]=> string(18) "11:53 - 25.02.2012" } [1]=> array(4) {
    3. ["Sender2"]=> string(7) "Test! 1" ["Empfaenger2"]=> string(4) "test" ["Nachricht2"]=> string(1) "1" ["Zeit2"]=> string(18) "11:53 - 25.02.2012" } [2]=> array(4) {
    4. ["Sender2"]=> string(2) "sa" ["Empfaenger2"]=> string(4) "test" ["Nachricht2"]=> string(2) "as" ["Zeit2"]=> string(18) "19:46 - 23.02.2012" } [3]=> array(4) {
    5. ["Sender2"]=> string(4) "test" ["Empfaenger2"]=> string(4) "test" ["Nachricht2"]=> string(5) "test!" ["Zeit2"]=> string(18) "19:48 - 23.02.2012" } }

    Zeit:

    Quellcode

    1. array(4) { [0]=> string(18) "11:53 - 25.02.2012" [1]=> string(18) "11:53 - 25.02.2012" [2]=> string(18) "19:46 - 23.02.2012" [3]=> string(18) "19:48 - 23.02.2012" }
    Ja, also das erste multisort funktioniert. Aber das zweite hat genau die Funktion wie der Stein der vor mir liegt. Das multisort schläft irgendwie. kein Fehler nicht.. Aber ich mache einmal alle Fehler an.. also alle alle :D

    Edit: Keine Fehlermeldungen..

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „orgertot“ ()

    Zeit_sort

    PHP-Quellcode

    1. Vor:
    2. array(4) { [0]=> string(18) "11:53 - 25.02.2012" [1]=> string(18) "11:53 - 25.02.2012" [2]=> string(18) "19:46 - 23.02.2012" [3]=> string(18) "19:48 - 23.02.2012" }
    3. Nach:
    4. array(4) { [0]=> string(18) "19:48 - 23.02.2012" [1]=> string(18) "19:46 - 23.02.2012" [2]=> string(18) "11:53 - 25.02.2012" [3]=> string(18) "11:53 - 25.02.2012" }

    Termin2:

    PHP-Quellcode

    1. Vor:
    2. array(4) { [0]=> array(4) { ["Sender2"]=> string(6) "Test 2" ["Empfaenger2"]=> string(4) "test" ["Nachricht2"]=> string(6) "Hallo!" ["Zeit2"]=> string(18) "11:53 - 25.02.2012" } [1]=> array(4) { ["Sender2"]=> string(7) "Test! 1" ["Empfaenger2"]=> string(4) "test" ["Nachricht2"]=> string(1) "1" ["Zeit2"]=> string(18) "11:53 - 25.02.2012" } [2]=> array(4) { ["Sender2"]=> string(2) "sa" ["Empfaenger2"]=> string(4) "test" ["Nachricht2"]=> string(2) "as" ["Zeit2"]=> string(18) "19:46 - 23.02.2012" } [3]=> array(4) { ["Sender2"]=> string(4) "test" ["Empfaenger2"]=> string(4) "test" ["Nachricht2"]=> string(5) "test!" ["Zeit2"]=> string(18) "19:48 - 23.02.2012" } }
    3. Nach:
    4. array(4) { [0]=> array(4) { ["Sender2"]=> string(4) "test" ["Empfaenger2"]=> string(4) "test" ["Nachricht2"]=> string(5) "test!" ["Zeit2"]=> string(18) "19:48 - 23.02.2012" } [1]=> array(4) { ["Sender2"]=> string(2) "sa" ["Empfaenger2"]=> string(4) "test" ["Nachricht2"]=> string(2) "as" ["Zeit2"]=> string(18) "19:46 - 23.02.2012" } [2]=> array(4) { ["Sender2"]=> string(6) "Test 2" ["Empfaenger2"]=> string(4) "test" ["Nachricht2"]=> string(6) "Hallo!" ["Zeit2"]=> string(18) "11:53 - 25.02.2012" } [3]=> array(4) { ["Sender2"]=> string(7) "Test! 1" ["Empfaenger2"]=> string(4) "test" ["Nachricht2"]=> string(1) "1" ["Zeit2"]=> string(18) "11:53 - 25.02.2012" } }

    Name_sort:

    PHP-Quellcode

    1. Vor:
    2. array(4) { [0]=> string(6) "Test 2" [1]=> string(7) "Test! 1" [2]=> string(2) "sa" [3]=> string(4) "test" }
    3. Nach:
    4. array(4) { [0]=> string(6) "Test 2" [1]=> string(7) "Test! 1" [2]=> string(2) "sa" [3]=> string(4) "test" }

    Hier noch mal wie es sein sollte und wie es ist:
    imm.io/hsVx
    imm.io/hsUt

    Quellcode

    1. --
    2. -- Tabellenstruktur für Tabelle `nachrichten`
    3. --
    4. CREATE TABLE IF NOT EXISTS `nachrichten` (
    5. `id` int(11) NOT NULL auto_increment,
    6. `sender` varchar(100) NOT NULL,
    7. `empfaenger` varchar(100) NOT NULL,
    8. `text` varchar(500) NOT NULL,
    9. `zeit` int(11) NOT NULL,
    10. `neu` int(1) NOT NULL default '1',
    11. PRIMARY KEY (`id`)
    12. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=38 ;


    Aber iwie habe ich keine Ahnung warum das 2te multisort nicht geht..
    Sonst könnten wir das erste multisort durch ein Left Join umgehen? ?(
    WARTE MAL!
    1 Sec!

    Edit: Fehler gefunden. Bei den mysqlsachen schon in Stunde und Tag umgewandelt. Es gab das 2x, deswegen falscher sort.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „orgertot“ ()