Sven: Mehrdimensionales Array erstellen

Hallo,

ich möchte ein mehrdimensionales Array erstellen, das folgende Infos enthält:

  • Personen (ID)
  • Personen (Name)
  • Projekte, in denen die Personen involviert sind (diese als Unter-Array). Jedes Projekt besteht aus: Projektcode und Order-Nummer (ein Integer-Wert, der die Reihenfolge festlegen soll, wenns später tabellarisch dargestellt wird).

Ich habe dazu auch mal folgende Übersicht gemacht:

Array
(
    [id] => Array
        (
            [0] => 0
            [1] => 1
        )

[name] => Array
        (
            [0] => ABC
            [1] => LMN
        )

[projects] => Array
        (
            [projectcode] => Array
                (
                    [0] => Array
                        (
                            [0] => Akquisition
                            [1] => Entwicklung
                            [2] => Kommunikation
                        )
                    [1] => Array
                        (
                            [0] => Präsentation
                            [1] => Verkauf
                            [2] => Versand
                        )
                )
            [project_order] => Array
                (
                    [0] => Array
                        (
                            [0] => 10
                            [1] => 20
                            [2] => 30
                        )
                    [1] => Array
                        (
                            [0] => 20
                            [1] => 30
                            [2] => 10
                        )
                )
        )

)

Ich krieg's aber nicht hin, soll heißen irgendwie sieht es immer anders aus. Geht das überhaupt so, wie ich es dargestellt habe?

Hier mein letzter Versuch:

$test['id'][] = '1';  
$test['name'][] = 'ABC';  
$test['projects']['projectcode'][] = 'Akquisition';  
$test['projects']['order'][] = '10';  
$test['projects']['projectcode'][] = 'Entwicklung';  
$test['projects']['order'][] = '20';  
$test['projects']['projectcode'][] = 'Kommunikation';  
$test['projects']['order'][] = '30';  
  
  
$test['id'][] = '2';  
$test['name'][] = 'XYZ';  
$test['projects']['projectcode'][] = 'Präsentation';  
$test['projects']['order'][] = '30';  
$test['projects']['projectcode'][] = 'Verkauf';  
$test['projects']['order'][] = '20';  
$test['projects']['projectcode'][] = 'Versand';  
$test['projects']['order'][] = '10';  
  
print_r($test);

Wo könnte der Fehler liegen? Danke schonmal!

Gruß
Sven

  1. Hi,

    ich möchte ein mehrdimensionales Array erstellen, das folgende Infos enthält:
    [...]

    [projects] => Array
            (
                [projectcode] => Array
                    (
                        [0] => Array
                            (
                                [0] => Akquisition
                                [1] => Entwicklung
                                [2] => Kommunikation
                            )

    Ich krieg's aber nicht hin, soll heißen irgendwie sieht es immer anders aus. Geht das überhaupt so, wie ich es dargestellt habe?

    Natürlich geht das.

    Hier mein letzter Versuch:

    $test['id'][] = '1';

    $test['name'][] = 'ABC';
    $test['projects']['projectcode'][] = 'Akquisition';
    $test['projects']['order'][] = '10';
    $test['projects']['projectcode'][] = 'Entwicklung';
    $test['projects']['order'][] = '20';
    $test['projects']['projectcode'][] = 'Kommunikation';

      
    Dadurch, dass du hier jeweils  
    `$test['projects']['projectcode'][] = '...';`{:.language-php}  
    schreibst, legst du in jedem dieser Schritte ein neues Element unterhalb von $test['projects']['projectcode'] an - genau das bewirken schliesslich die leeren eckigen Klammern.  
      
    Du willst aber gar nicht jedes Mal ein neues Element auf dieser Ebene für Akquisition, Entwicklung und Kommunikation anlegen - sondern sie zusammen in einem (Unter-)Array haben. Also musst du auch dafür sorgen, dass an dieser Stelle ein weiteres Array angelegt und die Werte hineingepackt werden.  
      
    MfG ChrisB  
      
    
    -- 
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    
  2. Moin,

    mit [] legst du einen neuen Eintrag in deinem Array an und somit einen neuen Schlüssel. Deine Arrays benötigen aber alle denselben Schlüssel.

    $test['id'][]  = '1';
    könnte so eindeutig werden:

    $test['id'][1] = 1;

    und dann geht es weiter mit

    $test['name'][1] = 'ABC';

    mit der "1" hast du ja schon deine ID, die du verwenden kannst.

    Eine andere Möglichkeit wäre es, den Schlüssel nur einmal zu benutzen.

    $test[] = array(
        'id' => '1',
        'name' => 'ABC',
        'projects' => array(
            'usw' => array(
            ),
            'usw' => 'etc'
        )
    );

    MfG,
     fwaw

  3. Lieber Sven,

    ich würde das Array anders aufbauen. Warum nicht so?

    $projekte = array(  
        // erstes Projekt (mit laufender Nummer im Array-Index)  
        0 => array (  
            'id' => '1', // Projekt mit der ID "1"  
            'name' => 'ABC', // Projektname  
            'codes' => array (  
                // hier stehen die Projekt-Codes  
                'Akquisition' => 10,  
                'Entwicklung' => 20,  
                'Kommunikation' => 30  
            )  
        ),  
        // zweites Projekt  
        1 => array (  
            'id' => '2', // Projekt mit der ID "2"  
            'name' => 'LMN', // Projektname  
            'codes' => array (  
                // hier stehen die Projekt-Codes  
                'Präsentation' => 20,  
                'Verkauf' => 30,  
                'Versand' => 10  
            )  
        )  
    )
    

    Obiger Code sollte etwas leichter verständlich und in seiner Struktur zwingender sein. Und wenn ich ein weiteres Projekt dem Array hinzufügen will, dann mache ich das so:

    // neues Projekt definieren  
    $p = array(  
        'id' => '42', // Projekt mit der ID "42"  
        'name' => 'FOO', // Projektname  
        'codes' => array (  
            // hier stehen die Projekt-Codes  
            'Distribution' => 99,  
            'Operation' => 34,  
            'Rekreation' => 22  
        )  
    );  
      
    // neues Projekt übernehmen  
    $projekte[] = $p;
    

    Wenn Dir die Projekt-IDs egal sind, dann könnte man den Index "id" komplett entfernen und die "laufende Nummer" im Array "projekte" stattdessen benutzen.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  4. Hallo Sven,

    • Personen (ID)
    • Personen (Name)
    • Projekte, in denen die Personen involviert sind (diese als Unter-Array). Jedes Projekt besteht aus: Projektcode und Order-Nummer (ein Integer-Wert, der die Reihenfolge festlegen soll, wenns später tabellarisch dargestellt wird).

    Du kannst den Zusammenhang zwischen Projketcode und Order-Nr. nicht direkt herstellen. So verstehe ich jedenfalls Dein Problem.

    Name und Projekt sind Eigenschaften des Objekts Person mit der Identität ID, Projektcode und Order-Nummer sind im bezüglich einer Person Eigenschaften eines Projektes. Das ist eigentlich etwas für OOP:

    class projekt{  
    	$set=array();  
      
    	function set_user($code,$order){  
    		$this->set[$code]=$order;  
    	}  
    }  
    class person{  
    	$name		='';  
    	$projekte	=new projekt;  
      
    	function set_projekt($code,$order){  
    		$this->projekte->set_user($code,$order);  
    	}  
    }  
    class personal{  
    	$ids	=array();  
      
    	function new_id($id,$name){  
    		if(!array_key_exists($id,$this->ids)){  
    			$this->ids[$id]=new person;  
    			$this->ids[$id]->name=$name;  
    		}  
    	}  
    	function set_projekt($id,$code,$order){  
    		$this->ids[$id]->set_projekt($code,$order);  
    	}  
    }
    

    Gruß aus Berlin!
    eddi