php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.07.2007, 14:43  
Erfahrener Benutzer
 
Registriert seit: 27.08.2004
Beiträge: 239
vollkommenegal
Standard Sortierung eines Arrays

Hallo.

Ich habe folgendes Array:

Code:
  [0] => Array
  (
      [a] => apfel
      [b] => 0
      [c] => Array
          (
              [filename] => test
              [groesse] => 103809 KB
          )
  )
  
  [1] => Array
  (
      [a] => zitrone
      [b] => 1
      [c] => Array
          (
              [filename] => egal
              [groesse] => 22809 KB
          )
  )
  
  [2] => Array
  (
      [a] => Apfel
      [b] => 2
      [c] => Array
          (
              [filename] => test
              [groesse] => 4525 KB
          )
  )
  
  [3] => Array
  (
      [a] => Zitrone
      [b] => 3
      [c] => Array
          (
              [filename] => bild
              [groesse] => 2009 KB
          )
  )
Dieses Array möchte ich sortieren, aber sort() gibt mir eine Sortierung abhängig von der Groß-/Kleineschreibung raus:

1. Apfel
2. Zitrone
3. apfel
4. zitrone

Ich möchte aber, dass "Apfel" und "apfel" gleichwertig behandelt werden:

1. Apfel
2. apfel
3. Zitrone
4. zitrone

Nutze ich usort mit "strcasecmp" erhalte ich die Fehlermeldung, dass die Konvertierung Array zur String fehlgeschlagen ist.

Irgendwie stehe ich jetzt auf dem Schlauch. Jemand einen Tipp für mich?

cya
vollkommenegal ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.07.2007, 14:56  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Naja, du übergibst scheinbar das innere Array als Parameter für eine Callback. strcasecomp erwartet aber ein String. Du musst also irgendwie auf das erste Element zugreifen. Das geht beispielsweise direkt mit einer eigenen Funktion, oder du nimmst eine anonyme Funktion.

PHP-Code:
function my_compare ($array1$array2)
{
  return (
strcasecmp ($array1['a],$array2['a']));
}

$myArray = usort ($myArray, '
my_compare); 
oder anonym:
PHP-Code:
$my_compare create_function ('$a,$b'' return strcasecmp($a["a"],$b["b"]);');
myArray usort ($myArray$my_compare); 
Ungetestet
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline   Mit Zitat antworten
Alt 14.07.2007, 15:15  
Erfahrener Benutzer
 
Registriert seit: 27.08.2004
Beiträge: 239
vollkommenegal
Standard

Danke, ich probiere es aus...

cya
vollkommenegal ist offline   Mit Zitat antworten
Alt 14.07.2007, 19:52  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

sort(strtolower($aArray);
Leider nicht.
Aber so sollte es Funktionieren:
PHP-Code:
<?php

array_map
('strtolower'$aArray);

?>
Ein Test:
PHP-Code:
<?php

$aArray
[]['a'] = 'Apfel'
$aArray[]['a'] = 'apfel';
$aArray[]['a'] = 'Birne';
$aArray[]['a'] = 'birne';
$aArray[]['a'] = 'Zitrone';

array_map('strtolower'$aArray);

echo 
'<pre>';
var_dump($aArray);
echo 
'</pre>';

?>
Ergebniss:
Code:
array(5) {
  [0]=>
  array(1) {
    ["a"]=>
    string(5) "Apfel"
  }
  [1]=>
  array(1) {
    ["a"]=>
    string(5) "apfel"
  }
  [2]=>
  array(1) {
    ["a"]=>
    string(5) "Birne"
  }
  [3]=>
  array(1) {
    ["a"]=>
    string(5) "birne"
  }
  [4]=>
  array(1) {
    ["a"]=>
    string(7) "Zitrone"
  }
}
phpdummi ist offline   Mit Zitat antworten
Alt 14.07.2007, 20:19  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

strtolower erwartet auch Strings (wie der Name schon sagt ). Es handelt sich hier aber um ein Array aus Arrays, wobei das äussere Array so sortiert werden soll, dass der erste Eintrag der inneren Arrays sortiert sind.

Btw: Was spricht gegen assoziatives Array?
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline   Mit Zitat antworten
Alt 14.07.2007, 21:12  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Darf ich fragen warum der Array überhaupt so blöd aufgebaut ist?
Dimension 1 hat numerische Indexe, könnte man hier nicht bereits einen eindeutigen Key verwenden, nach dem nun auch sortiert werden könnte?
Dann die 2. Dimension, a, b, c, .. als Keys zu verwenden ist doch Banane, nimm dann doch dort lieber aussagekräftigere Keys.
Key b ist total überflüßig, zumindest in dieser Reihe hier.
Einzig bei filename und groesse hast du sinnvolle Benennung, leider in einem extra Array.
Zergling-new ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mehrere Arrays summieren buggybugga PHP-Fortgeschrittene 8 22.07.2008 11:51
sortierung brian johnson Datenbanken 6 05.05.2008 19:53
Variable Variablen zusammen mit Arrays Kenshin PHP Tipps 2008 2 20.04.2008 15:30
Sortierung eines Arrays nach ANZAHL Werte simsalabim PHP Tipps 2008 5 06.11.2007 13:44
Arrays sortieren, Bezeichnung, Preis Ticos PHP Tipps 2006 4 07.09.2006 19:37
Arrays kreuzen PHP Tipps 2006 13 08.03.2006 11:36
[Erledigt] 2 Arrays miteinander vergleichen PHP Tipps 2007 3 17.12.2005 16:54
Objektorientierter Zugriff auf Multidimensionale Arrays PHP-Fortgeschrittene 31 26.11.2005 21:46
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
Sortierung mehrerer Arrays PHP Tipps 2005-2 24 10.06.2005 14:39
zweidimensionale Arrays für Templates aufbereiten? PHP Tipps 2005 6 22.03.2005 20:49
2 Arrays vergleichen und unterschiede auslesen PHP Tipps 2005 6 25.02.2005 09:34
Erkennung von Arrays in Strings PHP-Fortgeschrittene 15 07.12.2004 13:00
2 arrays in abhängigkeit ??? PHP Tipps 2004 2 11.08.2004 21:19
Werte eines Arrays in eine MySQL schreiben PHP Tipps 2004 2 28.06.2004 13:32


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:27 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.