array erweitern?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • array erweitern?

    Hallo Leute,

    mal eine kurze frage.

    Gibt es eine Funktion oder möglichkeit mitten in ein Array Daten einzufügen,
    so das der Index weiterrückt?

    Muster:
    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    id] => 47
                
    [name] => Möbel
                
    [ukat] => 0
            
    )

        [
    1] => Array
            (
                [
    id] => 48
                
    [name] => Bekleidung
                
    [ukat] => 0
            
    )

        [
    2] => Array
            (
                [
    id] => 49
                
    [name] => Krempel
                
    [ukat] => 0
            
    )

        [
    3] => Array
            (
                [
    id] => 50
                
    [name] => Schrott
                
    [ukat] => 0
            
    )


    )

    //So das zwischen Bekleidung und Krempel
    //folgender Array eingefügt wird.
                        
    [0] => Array
                            (
                                [
    id] => 63
                                
    [name] => Shirts Pullis
                                
    [ukat] => 48
                            
    )

                        [
    1] => Array
                            (
                                [
    id] => 65
                                
    [name] => Hosen Shorts
                                
    [ukat] => 48
                            

    konnte dazu nix passendes finden, ausser bei "bekleidung" ein Unterarrray anzulegen, dann müsste ich aber zwei verschachtelte foreach schleifen zur Ausgabe benutzen.
    mfg
    marc75

    <Platz für anderes>

  • #2
    Schau dir mal array_splice an.
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      das beste wäre wohl, wirklich das array multidimensional aufzubauen, die ausgabefunktion ist ja nur um eine klitzekleine rekursion zu erweitern
      Code:
      Array
      (
          [0] => Array
              (
                  [id] => 47
                  [name] => Möbel
                  [ukat] => 0
              )
      
          [1] => Array
              (
                  [id] => 48
                  [name] => Bekleidungl
                  [ukat] => 0
                  [subcats] => Array
                      (
                          [0] => Array
                              (
                                  [id] => 63
                                  [name] => Shirts & Pullover
                                  [ukat] => 48
                              )
      
                          [1] => Array
                              (
                                  [id] => 65
                                  [name] => Hosen & Shorts
                                  [ukat] => 48
                              )
      
                      )
      
              )
      
          [2] => Array
              (
                  [id] => 49
                  [name] => Krempel
                  [ukat] => 0
              )
      
      )
      PHP-Code:
      $daten = array(array('id' => 47,
          
      'name' => 'Möbel',
          
      'ukat' => 0),
        array(
      'id' => 48,
          
      'name' => 'Bekleidungl',
          
      'ukat' => 0,
          
      'subcats' => array(array('id' => 63,
              
      'name' => 'Shirts & Pullover',
              
      'ukat' => 48),
            array(
      'id' => 65,
              
      'name' => 'Hosen & Shorts',
              
      'ukat' => 48)
            )
        ),
        array(
      'id' => 49,
          
      'name' => 'Krempel',
          
      'ukat' => 0)
      );

      function 
      ausgabe($array) {
        
      $result '<ul>';
        foreach (
      $array as $entry) {
          
      $result .= '<li>ID: '.$entry['id'].', Name: '.$entry['name'].'  UKat: '.
            
      $entry['ukat'];
          if (isset(
      $entry['subcats']))
            
      $result .= ausgabe($entry['subcats']);
          
      $result .= '</li>';
        }
        return 
      $result.'</ul>';
      }

      echo 
      ausgabe($daten); 
      Zuletzt geändert von mrhappiness; 27.10.2004, 09:37.
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        oder kleine Fkt. schreiben:
        PHP-Code:
        <?php
        $input 
        = array(
          array(
        'id' => 47,
            
        'name' => 'Möbel',
            
        'ukat' => 0),
          array(
        'id' => 48,
            
        'name' => 'Bekleidungl',
            
        'ukat' => 0,
          ),
          array(
        'id' => 49,
            
        'name' => 'Krempel',
            
        'ukat' => 0)
        );
        function 
        array_AddElements($argArr,$pos,$argArrElem) {
            
            if (!
        is_array($argArr) || !is_array($argArrElem)) return false;
            if (
        $pos<|| $pos>count($argArr)) return false;
            
        $arrRet = array();
            
        $k 0;
            for (
        $i=0;$i<count($argArr);$i++) {
                if (
        $i==$pos) {
                    for (
        $j=0;$j<count($argArrElem);$j++) {
                        
        $arrRet[$k] = $argArrElem[$j];
                        
        $k++;
                    }
                    
        $arrRet[$k] = $argArr[$i];
                    
        $k++;
                } else {
                    
        $arrRet[$k] = $argArr[$i];
                    
        $k++;
                }
            }
            return 
        $arrRet;
        }
        $elem = array(
          array(
        'id' => 47,
            
        'name' => 'bla',
            
        'ukat' => 0),
          array(
        'id' => 48,
            
        'name' => 'blabla',
            
        'ukat' => 0,
          ),
          array(
        'id' => 49,
            
        'name' => 'blablabla',
            
        'ukat' => 0)
        );
        echo 
        '<pre>';
        print_r($input);
        echo 
        '</pre>';
        $input array_AddElements($input1$elem);
        echo 
        '<pre>';
        print_r($input);
        echo 
        '</pre>';
        ?>
        Ausgabe:

        Code:
        Array
        (
            [0] => Array
                (
                    [id] => 47
                    [name] => Möbel
                    [ukat] => 0
                )
        
            [1] => Array
                (
                    [id] => 48
                    [name] => Bekleidungl
                    [ukat] => 0
                )
        
            [2] => Array
                (
                    [id] => 49
                    [name] => Krempel
                    [ukat] => 0
                )
        
        )
        
        Array
        (
            [0] => Array
                (
                    [id] => 47
                    [name] => Möbel
                    [ukat] => 0
                )
        
            [1] => Array
                (
                    [id] => 47
                    [name] => bla
                    [ukat] => 0
                )
        
            [2] => Array
                (
                    [id] => 48
                    [name] => blabla
                    [ukat] => 0
                )
        
            [3] => Array
                (
                    [id] => 49
                    [name] => blablabla
                    [ukat] => 0
                )
        
            [4] => Array
                (
                    [id] => 48
                    [name] => Bekleidungl
                    [ukat] => 0
                )
        
            [5] => Array
                (
                    [id] => 49
                    [name] => Krempel
                    [ukat] => 0
                )
        
        )
        Weitere Fehlerabfang sowie für sonstige Modifizierung darfst du selbst handanlegen
        Zuletzt geändert von asp2php; 27.10.2004, 10:21.

        Kommentar


        • #5
          ok mit array_splice gehts am einfachsten für mich.

          PHP-Code:

          //$za wird per if mit einen Zähler gefüllt, sobalt die id == der gesuchten id 
          //hier 48 übereinstimmt. In der While wird ein Zähler mitgeführt der die 
          //Durchläufe mitzählt von 0 an.

          //$test ist das hauptarray
          //$bbb ist das Unterarray

          array_splice ($test$za0$bbb); 
          @happy so ungefähr wird es Zurzeit gehandhabt.

          @asp2php nette Funktion, nur hab ich dann wieder zwei foreach Durchläufe
          eins in der Funktion eins in der Ausgabe, eventl. läßt sich die Funktion woanders noch verwenden.
          mfg
          marc75

          <Platz für anderes>

          Kommentar


          • #6
            Original geschrieben von marc75
            @happy so ungefähr wird es Zurzeit gehandhabt.
            und warum dann array_splice?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Original geschrieben von mrhappiness
              und warum dann array_splice?
              ups, hab mich bei deiner Funktion doch glatt vertan, hab beim Überfliegen zwei foreachs gesehen brauche wohl eine Brille (oder Lupe), sollte jetzt mal Mittag machen.
              mfg
              marc75

              <Platz für anderes>

              Kommentar

              Lädt...
              X