php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.09.2006, 15:26  
Benutzer
 
Registriert seit: 24.01.2005
Beiträge: 56
Melchior
Standard Sortieralgo: Plötzlich keinen Zugriff mehr auf Daten

Hallo nachdem ich im Anfängerforum auf die richtige Spur gebracht worden bin, hab ich jetzt mal einen kleinen Algo geschrieben.

Ich möchte Namen aus einem Array nach dem Anfangsbuchstan sortieren. Die Daten ansich enthalten noch weiter infos wie email-adresse, aber das lassen wir der einfachheit mal aussen vor.

Aus dem 1d Array soll ein 2d Array werden, sprich

(Peter Arndt, Hans Becht, Klaus Doerr, Anke Dirke)

wird zu

(A((Peter),(Arndt)), B((Hans)(Becht)), D(((Klaus)(Doerr)), ((Anke),(Dirke))).

Das Datenarray bekomme ich von der Datenbank sortiert ausgelsen, lassen wir auch aussen vor. Testweise habe ich die Sachen mal manuell erstellt.

Vorab, mein Code funktioniert. Fast. Ich bekomme die Sachen richtig sortiert, aber plötzlich kann ich auf die Daten nicht mehr zugreifen (im Programm an sich schon!)

Hier mal mal script, extra noch vereinfacht und dokumentiert. Am Ende habe ich die Array mal durchdebbuged für euch.

Hoffe ihr könnt mir helfen, sitze den ganzen Tag schon dran und kriegs net gebacken an was es liegt.

PHP-Code:
public function Get_users_for_peoplecollector () {                ### called by forum (popup peoplecollector)
            
        //$users_arr =  $this->Prepare_users(0, "ORDER by prename ASC");
        
        
$users_arr = array(array());            ### Testperson 1
        
$users_arr[0]["name"] = "Arndt";
        
$users_arr[0]["prename"] = "Markus";
        
        
$users_arr[1]["name"] = "Becht";        ### Testperson 2
        
$users_arr[1]["prename"] = "Timo";
        
        
$users_arr[2]["name"] = "Dunst";        ### Testperson 3
        
$users_arr[2]["prename"] = "Patrick";
        
        
$capitals_arr = array ();                ### capitals dienen als Container, haben 1. den Anfangsbuchstaben und 2. 
        
        
        
foreach ($users_arr as $item) { 
            
            
$capital strtolower($item["name"]{0});        ### Erster Buchstabe + kleiner machen = capital
                    
            
if ($capitals_arr[sizeof($capitals_arr)-1]["capital"] != $capital) {    ### Schauen ob capital schon im Array ist, wenn nein, Anlegen!
                
                
array_push($capitals_arr, array ('capital' => $capital
                                                 
'users' => Array())) ;                ### Eintrag besteht aus capital + array von mit x beginnenden Namen
                
            
}
                    
            
$link_to_users $capitals_arr[sizeof($capitals_arr)-1]["users"];
            echo 
"

check array? "
.$link_to_users."
"
;                     ### --> Ausgabe bei jedem durchlauf: "Array", Users ist da

            
array_push($link_to_users, array ('prename' => $item["name"]    ));        ### Und jetzt kommt in das Array von users noch ein array mit den eigentlichen Daten
            
        //    print_r ($capitals_arr);
            
echo "> ".$link_to_users[0]["prename"];                                        ### HIER GEHT ES: er zeigt die Namen an: Arndt, Becht, Dunst
            
echo " =? ".$capitals_arr[sizeof($capitals_arr)-1]["users"][0]["prename"];    ### HIER NICHT!! Dabei ist der LINK von $link_to_users direkt kopiert !!!
    
        
}
        
        
        
print_r ($capitals_arr);  ### Array ( [0] => Array ( [capital] => a [users] => Array ( ) ) [1] => Array ( [capital] => b [users] => Array ( ) ) [2] => Array ( [capital] => d [users] => Array ( ) ) )
        
print_r ($capitals_arr[0]);  ### Array ( [capital] => a [users] => Array ( ) )
        
print_r ($capitals_arr[0]["capital"]);   ### a
        
print_r ($capitals_arr[0]["users"]);     ### Array ( )
        
print_r ($capitals_arr[0]["users"][0]); ### Keine Ausgabe, argh !!!!
        
        
return $capitals_arr;
    } 
Wäre sehr sehr nice wenn ihr mir helfen könntet
Marco[/php]
Melchior ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 05.09.2006, 16:03  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Dem Unterarray users werden in deinem Code nie irgendwelche Elemente zugwiesen. Was sollte dann in deiner letzten print_r()-Zeile als Ausgabe folgen, wenn das Array 0 Elemente aufweist?
xabbuh ist offline   Mit Zitat antworten
Alt 05.09.2006, 16:34  
Benutzer
 
Registriert seit: 24.01.2005
Beiträge: 56
Melchior
Standard

Stimmt die ganzen prints hätt ich mir zum Schluss sparen können...

Verstehe nicht warum user nichts zugewiesen bekommt, einmal kann ich ja mit der selben Referenz über eine Variable nachweisen, dass da doch was zugewiesen wurde.

gruß marco
Melchior ist offline   Mit Zitat antworten
Alt 06.09.2006, 13:46  
Benutzer
 
Registriert seit: 24.01.2005
Beiträge: 56
Melchior
Standard

kann mir niemand helfen?

wäre so super..
marco
__________________
MF goes Melchior
Melchior ist offline   Mit Zitat antworten
Alt 06.09.2006, 16:59  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Wie wärs mit der Schlüsselzeile:

$link_to_users = $capitals_arr[sizeof($capitals_arr)-1]["users"];

Überleg mal genau was dort passiert. Eint Tipp zum Nachlesen wären die Stichwörter Ausdrücke und Zuweisungsoperator. Naja, und ums etwas abzukürzen vor allem das Stichwort: Referenzen.
Think about it...
nikosch ist offline   Mit Zitat antworten
Alt 07.09.2006, 21:10  
Benutzer
 
Registriert seit: 24.01.2005
Beiträge: 56
Melchior
Standard

Sorry für späte Antwort, war die Zeit wenig zu hause.

oh man, stimmt, ich kopier ja immer nur ne referenz ins Array! Call by reference, call by value ... da war doch was.

danke! gleich ma testen
__________________
MF goes Melchior
Melchior ist offline   Mit Zitat antworten
Alt 07.09.2006, 21:19  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Anders herum:
Das Beispiel oben kopiert eben keine Referenz.
nikosch ist offline   Mit Zitat antworten
Alt 17.09.2006, 11:53  
Benutzer
 
Registriert seit: 24.01.2005
Beiträge: 56
Melchior
Standard

oh man, echt dumm. hab ja nur den inhalt gespeichert!!

kann mir jmd sagen, wie ich die Referenz davon kriege?

gruß marco

ps: hier das funktionierende script, viell. braucht es ja jmd

PHP-Code:
private function Get_users_for_peoplecollector () {                ### called by forum (popup peoplecollector) f.e.
            
        
$users_arr =  $this->Prepare_users(0"ORDER by name ASC");
        
$capitals_arr = array ();            
        
        foreach (
$users_arr as $item) { 
        
            
$capital strtolower($item["name"]{0});        

            if (!isset (
$capitals_arr[sizeof($capitals_arr)-1]["capital"]) || $capitals_arr[sizeof($capitals_arr)-1]["capital"] != $capital) {
                
                
array_push($capitals_arr, array ('capital' => $capital
                                                 
'users' => array ())) ;            
            } 
            
array_push($capitals_arr[sizeof($capitals_arr)-1]["users"], array ('prename' => $item["prename"],
                                                                               
'name' => $item["name"]    ));        
        }
    
        return 
$capitals_arr;
    } 
Melchior ist offline   Mit Zitat antworten
Alt 19.09.2006, 23:50  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

wie gesagt, die schlüsselzeile:

Code:
$link_to_users = $capitals_arr[sizeof($capitals_arr)-1]["users"];
zu
Code:
$link_to_users = & $capitals_arr[sizeof($capitals_arr)-1]["users"];
hatte funktioniert soweit ich mich erinnere....
nikosch 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
Zugriff auf eine ORACLE DB die Daten in eine MYSQL schreiben Cheesy PHP Tipps 2007 5 12.06.2007 15:36
Mehrere Arrays unterschiedlicher Größe kombinieren querfisch PHP Tipps 2007 9 31.03.2007 21:34
Session Frage - gleiches Formular 2 mal alle Daten behalten NetLook PHP Tipps 2007 1 21.11.2005 18:42
speicherung der daten bei stromausfall? MrCavity Datenbanken 2 19.11.2005 17:39
[Erledigt] sql daten für einen kunden auslesen/ändern im Formular PHP Tipps 2005-2 3 12.10.2005 08:36
[Erledigt] Daten aus mehreren Tabellen holen Datenbanken 0 19.09.2005 17:14
Daten auslesen und ändern Datenbanken 2 17.09.2005 19:28
Daten eintragen und auslesen Rettungsdackel Datenbanken 0 14.09.2005 16:29
Daten überschreiben in einer txt datei!? CHRIS PHP Tipps 2005 2 02.03.2005 15:02
Daten in Datenbank ändern PHP Tipps 2005 3 27.01.2005 14:40
Daten übergeben kampfnickel PHP Tipps 2005 4 05.01.2005 14:12
[Erledigt] MySQL-DB gibt keine Daten zurück!!! Datenbanken 4 21.12.2004 21:00
array_push nur in begrenzter Anzahl ausführen ? PHP Tipps 2004 2 07.09.2004 09:05
[Erledigt] Formular mit Daten werden auf anderer Seite zusammengefasst PHP Tipps 2004 4 15.08.2004 15:44
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
\php\ zugriff 2d array, der dunst becht

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:21 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.