Portal > Foren > PHP > PHP-Programmierung > Index in Assoziative Arrays verwenden
Antwort
 
Themen-Optionen
Alt 23.11.2006, 11:26 Nach oben    #1
Benutzer
 
Benutzerbild von chrigu
 
Registriert seit: 18.09.2006
Beiträge: 50
Standard Index in Assoziative Arrays verwenden

Hallo zusammen,
Irgendwie stehe ich total auf dem Schlauch. Ich habe ein assoziative Array.
Diese Array heisst $info
Code:
array(1) {
  [0] => array(4) {
    ["institut"] => string(24) "Institut1"
    ["institut2"] => string(27) "Institut2"
    ["function"] => string(6) "Function"
    ["function2"] => string(6) "Function2"
  }
}
Warum kann ich "Institut1" nicht mit $info[0][0] ansprechen?
PHP meldet immer einen "Undefined offset: 0"..
Warum?

Vielen Dank,
Chrigu
chrigu ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 11:33 Nach oben    #2
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

weil es [0][0] nicht gibt. es gibt nur [0]['institut']. Was du bräuchtest wäre wenn dann ein kombiarray, dass sowohl assoziativ als auch numerisch ist.
das würde dann so aussehen:
Code:
array(1) {
  [0] => array(4) {
    ["institut"] => string(24) "Institut1"
    [0] => string(24) "Institut1"
    ["institut2"] => string(27) "Institut2"
    [1] => string(27) "Institut2"
    ["function"] => string(6) "Function"
    [2] => string(6) "Function"
    ["function2"] => string(6) "Function2"
    [3] => string(6) "Function2"
  }
}
da das doppelte datenhaltung ist, ist es nicht so toll.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 11:33 Nach oben    #3
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 591
Standard

Zitat:
$info[0][0]
$info[0]["institut"] ...
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 11:36 Nach oben    #4
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

...oder
PHP-Code:
echo reset($info[0]); 
...oder
PHP-Code:
array(1) {
  [
"Institut1"] => array(3) {
    [
"institut2"] => string(27"Institut2"
    
["function"] => string(6"Function"
    
["function2"] => string(6"Function2"
  
}

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 11:37 Nach oben    #5
Benutzer
 
Benutzerbild von chrigu
 
Registriert seit: 18.09.2006
Beiträge: 50
Standard

Tja, mit dieser Antwort habe ich gerechnet. Wollte eifach sicher sein, dass ich nicht falsch liege. Schade..
Wäre nämlich ziemlich praktisch!

Gruss,
Chrigu
chrigu ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 11:39 Nach oben    #6
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Die Frage ist doch, wozu ein Assoziatives Array, wenn du letzten endes doch numerisch darauf zugreifen willst.
Erkläre mir bitte, warum das praktischer sein sollte. Ich kann deine PHP-Kenntnisse nicht einschätzen, aber vielleicht findest du es einfach nur praktischer weil du den Umgang mit assoziativen Arrays nicht beherrscht/kennst.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 11:44 Nach oben    #7
Benutzer
 
Benutzerbild von chrigu
 
Registriert seit: 18.09.2006
Beiträge: 50
Standard

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
Die Frage ist doch, wozu ein Assoziatives Array, wenn du letzten endes doch numerisch darauf zugreifen willst.
Erkläre mir bitte, warum das praktischer sein sollte. Ich kann deine PHP-Kenntnisse nicht einschätzen, aber vielleicht findest du es einfach nur praktischer weil du den Umgang mit assoziativen Arrays nicht beherrscht/kennst.
Problem ist, dass diese Daten aus einem LDAP kommen. Diese Felder können existieren oder auch nicht. Darum hätte ich lieber anhand der Anzahl-Einträge/2 auf die Anzahl Institute geschlossen.
So hätte ich dann auf das Feld/Function schliessen können, welches zu diesem Institut gehört..
War das etwa verständlich
chrigu ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 11:50 Nach oben    #8
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Es gibt 2 Möglichkeiten:
PHP-Code:
$anzahl count($array[0])/2
wenn jedes institut ein eigenes hauptarray bekommt, dann:
PHP-Code:
$anzahl count($array)/2
je nachdem.
Das was du suchst?
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 11:58 Nach oben    #9
Benutzer
 
Benutzerbild von chrigu
 
Registriert seit: 18.09.2006
Beiträge: 50
Standard

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
PHP-Code:
$anzahl count($array[0])/2
wenn
Genau das habe ich ja versucht. Aber wenn ich später nicht per Index auf das Feld komme, bringt es nichts..
Habe ich jetzt eine andere Lösung gefunden.
Wobei $institut das gesuchte Institut ist.

PHP-Code:
$index null;
foreach (
$array[0] as $key => $value) {
  if (
preg_match("/$institut/",$value)) {
    
$index preg_replace("/institut/","function",$key);
  }
}
$gesuchte_function $array[0][$index
Danke trotzdem!

Gruss,
Chrigu
chrigu ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 12:08 Nach oben    #10
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

ne ne ne da schau dir lieber array_key_exists() an. das sollte performanter sein als dein preg_match samt schleife.

ansonsten warum nicht damit:
PHP-Code:
if(isset($array[0][$deinInstitut]))
{
    
$gesuchteFunktion $array[0][$deinInstitut];

damit sparst du die schleife, preg_match und preg_replace...
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 12:16 Nach oben    #11
Benutzer
 
Benutzerbild von chrigu
 
Registriert seit: 18.09.2006
Beiträge: 50
Standard

Nein, ich glaube du verstehst das Problem falsch. Ich erläutere nochmals..

Code:
array(1) {
  [0] => array(4) {
    ["institut"] => string(27) "Institut XY"
    ["institut2"] => string(38) "Institut Z"
    ["function"] => string(6) "Mitarbeiter"
    ["function2"] => string(6) "Chef"
  }
}
Ich muss jetzt wissen, ob die Person in "Institut XY" ein "Mitarbeiter" ist, oder nicht..
Es kann jetzt genau 1 Paar Institut/Function haben, oder 5 Paare, dass ist variabel..
chrigu ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 12:37 Nach oben    #12
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Also hat "Institut XY" einen "Mitarbeiter" und "Institut Z" hat einen "Chef" so richtig?
Dann nutz array_search() und such nach "Institut Z", dann wird dir zurückgeliefert: "institut2", dann darauf ein preg_replace von "institut" nach "funktion" und du bekommst "chef".
PHP-Code:
$key array_search('Institut Z'$array[0]);
$index preg_replace("/institut/","function",$key);
$gesuchteFunktion $array[0][$index]; 
das ist immer noch effektiver als die Schleife.

//edit: [ot]mein gott ist es schön mal wieder in php zu denken statt in jsp DANKE![/ot]
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 13:06 Nach oben    #13
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

@Warren: Soweit ich weiß, halten Kombi-Arrays die Daten nur in EINEM der beiden Felder und das andere Feld ist eine Referenz darauf, ergo: Ist es in dem Sinne keine doppelte Datenhaltung.

Ansonsten kann man auch einfach das Array nach Key sortieren lassen, dann sind alle Functions vorn, alphabetisch sortiert und alle Institute dahinter. Dann kann man mit reset(), current() und next() die einzelnen Elemente auswählen und durchsuchen. Da man ja aber ohnehin das Array durchsuchen muss, sollte man überlegen, nicht vielleicht direkt eine Schleife zur Array-Verarbeitung zu nutzen. Muss man dann aber selber wissen...
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 13:13 Nach oben    #14
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Ah das wusste ich nicht.
Wenn er wirklich jeden Eintrag braucht, sollte eine große umfassende Schleife sinnvoll sein, das stimmt. Allerdings war aus seiner "Lösung" eher zu schließen, dass er nur einen Eintrag braucht. Und da ist die schleife aus Performancesicht nicht die beste Lösung.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 13:51 Nach oben    #15
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

Ich würd diese grausige Struktur erstmal umschreiben. Irgendwie so:

PHP-Code:
$aRoles = array();

foreach (
$info as $sKey => $sValue)
{
    if (
=== strpos($sKey'institut')
        && isset(
$info['function' substr($sKeystrlen('institut'))]))
        
$aRoles[$sValue] = $info['function' substr($sKeystrlen('institut'))]

Wenn mehrere Rollen möglich sind, dann natürlich $aRoles[$sValue][].

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.11.2006, 15:05 Nach oben    #16
Benutzer
 
Benutzerbild von chrigu
 
Registriert seit: 18.09.2006
Beiträge: 50
Standard

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
Ah das wusste ich nicht.
Wenn er wirklich jeden Eintrag braucht, sollte eine große umfassende Schleife sinnvoll sein, das stimmt. Allerdings war aus seiner "Lösung" eher zu schließen, dass er nur einen Eintrag braucht. Und da ist die schleife aus Performancesicht nicht die beste Lösung.
Genau, es gibt nur ein Eintrag. Deine Lösung klappt bestens, danke!

Gruss,
Chrigu
chrigu ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.11.2006, 06:45 Nach oben    #17
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
Ah das wusste ich nicht.
Wenn er wirklich jeden Eintrag braucht, sollte eine große umfassende Schleife sinnvoll sein, das stimmt. Allerdings war aus seiner "Lösung" eher zu schließen, dass er nur einen Eintrag braucht. Und da ist die schleife aus Performancesicht nicht die beste Lösung.
Schon, nur finde ich, dass eine Schleife dennoch Sinn macht, da man ja a) erstmal suchen muss und nicht direkt weiß, welcher Eintrag der ist, den man sucht (sonst könnte man ja direkt drauf zugreifen). Performancetechnisch würde ich nachdem Finden des einen Datensatzes einfach die Schleife abbrechen!? Wäre auch einfacher das später mal zu erweitern, sollte vielleicht doch mal mehr als ein Datensatz nötig sein.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.11.2006, 07:11 Nach oben    #18
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

aber die implementierte Arraysuche array_search() sollte schneller sein als alle foreach oder while-versuche. zumal dann der vergleich mittels if wegfällt.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.11.2006, 08:58 Nach oben    #19
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

OK, das mag sein, getestet habe ich das noch nicht, aber wahrscheinlich hast du in der Hinsicht recht.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.11.2006, 09:47 Nach oben    #20
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Hm... das teste ich heute abend mal daheim hab ja sonst nix zu tun
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

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 aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
arrays in formularen mit id="" robo47 HTML, XML und CSS 2 29.05.2006 15:24
Problem mit Arrays pixel Allgemeine Java-Programmierung 9 07.05.2005 16:29
Mehrdimensionale Arrays Quakes Allgemeine Java-Programmierung 8 17.04.2005 14:44
Actionarray Index ermitteln Swingman Desktop-Applikationen und Grafik 5 14.12.2004 07:32
[PHP] Was sind eigentlich Arrays? Ben Tutorials 5 09.12.2004 09:29


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:53 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44