Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage Entwicklung PHP

GELÖST

Sortieren von Unterarray

Mitglied: ottscho

ottscho (Level 2) - Jetzt verbinden

21.03.2012, aktualisiert 22.03.2012, 3588 Aufrufe, 8 Kommentare

Hey,

ich komme nicht ganz klar und weiß nicht wie ich mein Array nach Name sortieren kann. Bein beispiel ist jetzt leider schon korrekt sortiert, aber das Array besteht aus viel mehr Datensätzen. Das ist nur ein kleiner Auszug.
Im Prinzip sollen alle Unterarrys nach ["name"] sortiert werden. So wie hier Bridgestone, Goodyear etc.

Habt ihr mir einen Tipp? mit asort und ksort kann ich ja kein Feld mit geben.

01.
array(71) { 
02.
  [26]=> 
03.
  array(5) { 
04.
    ["id"]=> 
05.
    string(2) "26" 
06.
    ["name"]=> 
07.
    string(11) "BRIDGESTONE" 
08.
    ["img"]=> 
09.
    string(36) "d01381cfdbedf6b2fa3a8ca44c093327.png" 
10.
    ["link"]=> 
11.
    string(0) "" 
12.
    ["count"]=> 
13.
    string(2) "41" 
14.
15.
  [9]=> 
16.
  array(5) { 
17.
    ["id"]=> 
18.
    string(1) "9" 
19.
    ["name"]=> 
20.
    string(8) "GOODYEAR" 
21.
    ["img"]=> 
22.
    string(36) "05acbc947e294fda0a05680a826be36f.png" 
23.
    ["link"]=> 
24.
    string(0) "" 
25.
    ["count"]=> 
26.
    string(2) "28" 
27.
28.
  [2]=> 
29.
  array(5) { 
30.
    ["id"]=> 
31.
    string(1) "2" 
32.
    ["name"]=> 
33.
    string(7) "PIRELLI" 
34.
    ["img"]=> 
35.
    string(36) "7c9d8090adb1e1192f3864b694058911.png" 
36.
    ["link"]=> 
37.
    string(0) "" 
38.
    ["count"]=> 
39.
    string(2) "27" 
40.
41.
}
Besten Dank im Voraus
Mitglied: neuni88
21.03.2012 um 20:40 Uhr
Tag,

das solltest du mit usort recht einfach hinbekommen: http://www.php.net/manual/de/function.usort.php
Baust dir einfach eine Vergleichsfunktion wie im Beispiel von php.net, vergleichst aber nicht $a und $b direkt, sondern $a['name'] und $b['name'].
Bitte warten ..
Mitglied: Guenni
21.03.2012 um 20:43 Uhr
Hi ottscho,

du kannst die Funktion uasort mit einer Vergleichsfunktion verwenden.

01.
<?php 
02.
/* 
03.
* Vergleichsfunktion  
04.
*/ 
05.
function so($a, $b){ 
06.
	/* 
07.
	* @index: Enthält irgendeinen Schlüssel des/der Arrays, z.B.: 
08.
	*/ 
09.
	$index='name'
10.
	return (strcmp ($a[$index],$b[$index])); 
11.
12.
?>
Die Vergleichsfunktion wird dann zusammen mit dem Array an uasort übergeben,

die Vergleichsfunktion allerdings in Anführungszeichen ohne Klammern!!.

01.
<?php 
02.
/* 
03.
* Sortieren 
04.
*/ 
05.
uasort($arr, 'so'); 
06.
?>

Gruß
Günni

PS.: Für den Fall, dass nach Zahlen sortiert werden soll, kannst du nicht strcmp verwenden.

Dazu müsste die Vergleichsfunktion anders geschrieben werden:

01.
<?php 
02.
function so($a, $b) { 
03.
    $index=Array-Key; 
04.
    if ($a[$index] == $b[$index]) { 
05.
        return 0; 
06.
07.
    return ($a[$index] < $b[$index]) ? -1 : 1; 
08.
09.
?>
Aber strcmp ist halt kürzer ;-p
Bitte warten ..
Mitglied: ottscho
22.03.2012 um 07:24 Uhr
Danke euch für die super Antwoort mit direktem Lösungsweg.
Ich werde das heute abend direkt ausprobieren.

Grüße
Bitte warten ..
Mitglied: ottscho
22.03.2012 um 08:21 Uhr
Hi,

habe es doch schnell eben getestet. Leider klappt es nicht.
Kann es sein, dass ich eine Ebene tiefer muss?

Theoretisch befindet sich ja der Key hier:

sSuppliers[0]['name']
sSuppliers[1]['name']
sSuppliers[2]['name']
sSuppliers[3]['name']
Bitte warten ..
Mitglied: ottscho
22.03.2012 um 08:58 Uhr
so habe ich es nun:
01.
static function mysearchFuzzyAction(Enlight_Hook_HookArgs $args) 
02.
 
03.
	{	 
04.
 
05.
		$view = $args->getSubject()->View(); 
06.
 
07.
		$supplier = $view->sSearchResults['sSuppliers']; 
08.
 
09.
		var_dump($supplier); 
10.
 
11.
		$supplier = uasort($supplier, 'so'); 
12.
 
13.
		var_dump($supplier); 
14.
 
15.
		 
16.
 
17.
18.
 
19.
		 
20.
 
21.
	/* 
22.
 
23.
	* Vergleichsfunktion  
24.
 
25.
	*/ 
26.
 
27.
	function so($a, $b){ 
28.
 
29.
		return (strcmp ($a['name'],$b['name'])); 
30.
 
31.
	}
Beim ersten dump wird das Array normal ausgegeben und beim Zweiten nach der Sortierung ist NULL.


Ich habe die Fehlerquelle gefunden, aber ich kann das Porblem nicht lösen:

01.
$supplier = $view->sSearchResults['sSuppliers']; 
02.
 
03.
$keys = array_keys($supplier); 
04.
print_r($supplier[$keys[0]]['name']);
So gebe ich den Namen aus. Ich müsste nun die Function anpassen, dass die Sortierung funktioniert.
Bitte warten ..
Mitglied: Guenni
22.03.2012 um 10:25 Uhr
Hi ottscho,

das muß irgendeine andere Ursache haben. Ich poste dir mal das komplette Script

und die Ausgabe vor und nach der Sortierung. Dann siehst du, dass mein Testarray

genau wie deins aufgebaut ist und die Sortierung nach 'name' durchgeführt wird.

01.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
02.
<html> 
03.
<head> 
04.
<title>Untitled</title> 
05.
</head> 
06.
<body> 
07.
<?  
08.
/* 
09.
* Vergleichsfunktion  
10.
*/ 
11.
function so($a, $b){ 
12.
	/* 
13.
	* @index: Enthält irgendeinen Schlüssel des/der Arrays, z.B.: 
14.
	*/ 
15.
	$index='name'
16.
	return (strcmp ($a[$index],$b[$index])); 
17.
18.
 
19.
/* 
20.
* Ein Array 
21.
*/ 
22.
$arr = array ( array('id' => '26','name' => 'Anna', 'datum' => '01.01.1963','sex' => 'weiblich'), 
23.
                array('id' => '23','name' => 'Xaver', 'datum' => '03.05.1964','sex' => 'männlich'), 
24.
                  array('id' => '22','name' => 'Jonas', 'datum' => '01.01.1961','sex' => 'männlich'),  
25.
                  array('id' => '21','name' => 'Sabine', 'datum' => '13.09.1968','sex' => 'weiblich')); 
26.
/* 
27.
* Ausgabe des Arrays 
28.
*/								 
29.
echo "Ausgabe:<pre>"
30.
var_dump($arr); 
31.
echo "</pre>"
32.
/* 
33.
Sortieren 
34.
*/ 
35.
uasort($arr,'so'); 
36.
/* 
37.
* Ausgabe des sortierten Arrays 
38.
*/ 
39.
echo "Ausgabe nach uasort:<pre>"
40.
var_dump($arr); 
41.
echo "</pre>"
42.
?> 
43.
</body> 
44.
</html>
Und hier die Ausgaben von var_dump:

01.
Ausgabe: 
02.
array(4) { 
03.
  [0]=> 
04.
  array(4) { 
05.
    ["id"]=> 
06.
    string(2) "26" 
07.
    ["name"]=> 
08.
    string(4) "Anna" 
09.
    ["datum"]=> 
10.
    string(10) "01.01.1963" 
11.
    ["sex"]=> 
12.
    string(8) "weiblich" 
13.
14.
  [1]=> 
15.
  array(4) { 
16.
    ["id"]=> 
17.
    string(2) "23" 
18.
    ["name"]=> 
19.
    string(5) "Xaver" 
20.
    ["datum"]=> 
21.
    string(10) "03.05.1964" 
22.
    ["sex"]=> 
23.
    string(8) "männlich" 
24.
25.
  [2]=> 
26.
  array(4) { 
27.
    ["id"]=> 
28.
    string(2) "22" 
29.
    ["name"]=> 
30.
    string(5) "Jonas" 
31.
    ["datum"]=> 
32.
    string(10) "01.01.1961" 
33.
    ["sex"]=> 
34.
    string(8) "männlich" 
35.
36.
  [3]=> 
37.
  array(4) { 
38.
    ["id"]=> 
39.
    string(2) "21" 
40.
    ["name"]=> 
41.
    string(6) "Sabine" 
42.
    ["datum"]=> 
43.
    string(10) "13.09.1968" 
44.
    ["sex"]=> 
45.
    string(8) "weiblich" 
46.
47.
48.
 
49.
Ausgabe nach uasort: 
50.
array(4) { 
51.
  [0]=> 
52.
  array(4) { 
53.
    ["id"]=> 
54.
    string(2) "26" 
55.
    ["name"]=> 
56.
    string(4) "Anna" 
57.
    ["datum"]=> 
58.
    string(10) "01.01.1963" 
59.
    ["sex"]=> 
60.
    string(8) "weiblich" 
61.
62.
  [2]=> 
63.
  array(4) { 
64.
    ["id"]=> 
65.
    string(2) "22" 
66.
    ["name"]=> 
67.
    string(5) "Jonas" 
68.
    ["datum"]=> 
69.
    string(10) "01.01.1961" 
70.
    ["sex"]=> 
71.
    string(8) "männlich" 
72.
73.
  [3]=> 
74.
  array(4) { 
75.
    ["id"]=> 
76.
    string(2) "21" 
77.
    ["name"]=> 
78.
    string(6) "Sabine" 
79.
    ["datum"]=> 
80.
    string(10) "13.09.1968" 
81.
    ["sex"]=> 
82.
    string(8) "weiblich" 
83.
84.
  [1]=> 
85.
  array(4) { 
86.
    ["id"]=> 
87.
    string(2) "23" 
88.
    ["name"]=> 
89.
    string(5) "Xaver" 
90.
    ["datum"]=> 
91.
    string(10) "03.05.1964" 
92.
    ["sex"]=> 
93.
    string(8) "männlich" 
94.
95.
}
Gruß
Günni
Bitte warten ..
Mitglied: ottscho
22.03.2012 um 11:13 Uhr
Hi Günni,

dein Script funktioniert so natürlich.
Was mir aber auffällt:

01.
array(4) { 
02.
  [0]=> 
03.
  array(4) { 
04.
    ["id"]=> 
05.
    string(2) "26" 
06.
    ["name"]=> 
07.
    string(4) "Anna" 
08.
    ["datum"]=> 
09.
    string(10) "01.01.1963" 
10.
    ["sex"]=> 
11.
    string(8) "weiblich" 
12.
13.
  [1]=> 
14.
  array(4) { 
15.
    ["id"]=> 
16.
    string(2) "23" 
17.
    ["name"]=> 
18.
    string(5) "Xaver" 
19.
    ["datum"]=> 
20.
    string(10) "03.05.1964" 
21.
    ["sex"]=> 
22.
    string(8) "männlich" 
23.
24.
  [2]=> 
25.
  array(4) { 
26.
    ["id"]=> 
27.
    string(2) "22" 
28.
    ["name"]=> 
29.
    string(5) "Jonas" 
30.
    ["datum"]=> 
31.
    string(10) "01.01.1961" 
32.
    ["sex"]=> 
33.
    string(8) "männlich" 
34.
35.
  [3]=> 
36.
  array(4) { 
37.
    ["id"]=> 
38.
    string(2) "21" 
39.
    ["name"]=> 
40.
    string(6) "Sabine" 
41.
    ["datum"]=> 
42.
    string(10) "13.09.1968" 
43.
    ["sex"]=> 
44.
    string(8) "weiblich" 
45.
46.
47.
 
48.
Ausgabe nach uasort: 
49.
array(4) { 
50.
  [0]=> 
51.
  array(4) { 
52.
    ["id"]=> 
53.
    string(2) "26" 
54.
    ["name"]=> 
55.
    string(4) "Anna" 
56.
    ["datum"]=> 
57.
    string(10) "01.01.1963" 
58.
    ["sex"]=> 
59.
    string(8) "weiblich" 
60.
61.
  [2]=> 
62.
  array(4) { 
63.
    ["id"]=> 
64.
    string(2) "22" 
65.
    ["name"]=> 
66.
    string(5) "Jonas" 
67.
    ["datum"]=> 
68.
    string(10) "01.01.1961" 
69.
    ["sex"]=> 
70.
    string(8) "männlich" 
71.
72.
  [3]=> 
73.
  array(4) { 
74.
    ["id"]=> 
75.
    string(2) "21" 
76.
    ["name"]=> 
77.
    string(6) "Sabine" 
78.
    ["datum"]=> 
79.
    string(10) "13.09.1968" 
80.
    ["sex"]=> 
81.
    string(8) "weiblich" 
82.
83.
  [1]=> 
84.
  array(4) { 
85.
    ["id"]=> 
86.
    string(2) "23" 
87.
    ["name"]=> 
88.
    string(5) "Xaver" 
89.
    ["datum"]=> 
90.
    string(10) "03.05.1964" 
91.
    ["sex"]=> 
92.
    string(8) "männlich" 
93.
94.
}
Bei dir Sind die Schlüssel nach der Reihe fortlaufend 0,1,2,3

array(4) {
[0]=>
....
....
[1]=>
[2]=>

Bei mir siehe erstes Post aber zufällig:

array(71) {
[26]=>
....
....
[9]=>
[2]=>

Evtl hängt es damit zusammen.


Danke dir für deine Mühe
Bitte warten ..
Mitglied: ottscho
22.03.2012 um 11:39 Uhr
Habe es gelöst.
Zwei fehler von mir.
Ich habe das Array immer wieder übersachrieben und ich muss in meiner Umgebung die Classe beim Vergleich mitgeben:

01.
static function mysearchFuzzyAction(Enlight_Hook_HookArgs $args) 
02.
 
03.
	{	 
04.
 
05.
		$view = $args->getSubject()->View(); 
06.
 
07.
		$supplier = $view->sSearchResults['sSuppliers']; 
08.
 
09.
		uasort($supplier, array('Shopware_Plugins_Frontend_OttschoSortSupplierPlugin_Bootstrap' ,'so')); 
10.
 
11.
		var_dump($supplier); 
12.
 
13.
		 
14.
 
15.
16.
 
17.
		 
18.
 
19.
	/* 
20.
 
21.
	* Vergleichsfunktion  
22.
 
23.
	*/ 
24.
 
25.
	function so($a, $b){ 
26.
 
27.
		return (strcmp ($a['name'],$b['name'])); 
28.
 
29.
	}
Bitte warten ..
Ähnliche Inhalte
C und C++
Sortieren von Zeiten
Frage von DippsC und C++3 Kommentare

Hallo Leute bin gerade komplett ratlos. Ich habe 8 Textboxen wo Zeiten über Serial ein getragen werden Z1.text bis ...

PHP
Team Mitglieder, in Rangfolge sortieren
gelöst Frage von vServerPHP9 Kommentare

Hallo, ich habe ein Problem mit diesem Plugin, und zwar soll es folgendes können. Die 3 Leute von der ...

Windows Server
Windows Updates nach Datum sortieren
Frage von RG2525Windows Server2 Kommentare

Hallo, Ich muss auf einem Windows Server 2008 R2 ca. 130 ausstehende Updates installieren. Alle Updates auf einmal zu ...

Monitoring
IP Adressbereich nach Subnetz sortieren?
Frage von empty792Monitoring21 Kommentare

Guten Tag, ich habe einen IP Adressbereich von 172.22.0.0 - 172.22.3.254. Ich bin gerade dabei das Subnetz umzustellen von ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit29 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

SAN, NAS, DAS
Hilfe beim Einrichten eines Storages (SAN)
gelöst Frage von Vader666SAN, NAS, DAS15 Kommentare

Hallo Admins! Ich bin in einer kleineren Firma und hatte bisher mit dem Thema SAN nur in meiner Ausbildung ...

Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...