Announcement

Collapse
No announcement yet.

Arrayproblem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Antz
    started a topic Arrayproblem

    Arrayproblem

    Servus.
    Ich habe folgendes Problem:

    Code:
    <?php
    
    function debug($param)
    {
        // Output    
    }
    
    function anyFunction($param = null)
    {
        $anyArray = array();
        
        $anyArray['item1']['value1'] = 'iv11';
        $anyArray['item1']['value2'] = 'iv12';
        $anyArray['item2']['value1'] = 'iv21';
        $anyArray['item2']['value2'] = 'iv22';
        $anyArray['item3']['value1'] = 'iv31';
        $anyArray['item3']['value2'] = 'iv32';
        
        return $anyArray;
    }
    
    $data = anyFunction();
    debug($data);
    Dieser Code gibt das Array aus der Funktion anyFunction aus (mittels einer debug-Funktion).
    Wie schaffe ich es mittels Parameter einen Wert ausgeben zulassen nach folgendem Prinzip:

    Achtung, Pseudocode!
    Code:
    <?php
    
    function debug($param)
    {
        // Output    
    }
    
    function anyFunction($param = null)
    {
        $anyArray = array();
        
        $anyArray['item1']['value1'] = 'iv11';
        $anyArray['item1']['value2'] = 'iv12';
        $anyArray['item2']['value1'] = 'iv21';
        $anyArray['item2']['value2'] = 'iv22';
        $anyArray['item3']['value1'] = 'iv31';
        $anyArray['item3']['value2'] = 'iv32';
        
        if ($param && isset($anyArray['item1']['value2'])) {
            return $anyArray['item1']['value2'];
        }
        else {
            return false;
        }
    }
    
    $data = anyFunction(['item1']['value2']);
    debug($data);
    Ich möchte erreichen, dass ich durch einen Parameter definieren kann, welcher Wert aus dem Array zurückgegeben werden soll. Ich stelle mich sicher ein wenig dumm an, aber ich bin nicht auf eine Lösung gekommen. Das kann doch nicht so schwer sein...

  • Antz
    replied
    Ah ja klar, das ist natürlich bedeutend eleganter, ich vergesse immer dass das PHP auch kann, warum auch immer ich nicht daran denke.

    Danke schön.

    Leave a comment:


  • Falk Prüfer
    replied
    Hallo,

    statt einen kommaseparierten String zu splitten, kann man sich auch den Umstand zu nutze machen, dass PHP eine Variable Anzahl an Parametern unterstützt. Auch ist es von Vorteil bei der Iteration über die Ebenen mit Referenzen zu arbeiten, statt immer das komplette Array in das Zwischenergebnis zu kopieren.

    PHP Code:
    function anyFunction()
    {
      
    $anyArray = array(
        
    'ebene1' => array(
          
    'ebene2' => array(
            
    'ebene3' => 'anyValue',
          ),
        ),
      );

      
    $numArg =  func_num_args();
      
    $curVal =& $anyArray;

      for (
    $i 0$i $numArg$i++) {
        
    $curParam func_get_arg($i);
        if (isset(
    $curVal[$curParam])) {
          
    $curVal =& $curVal[$curParam];
        }
        else {
          return 
    null;
          
    // oder besser eine Exception auslösen!
        
    }
      }

      return 
    $curVal;
    }

    $data anyFunction('ebene1''ebene2''ebene3'); 
    Gruß Falk

    Leave a comment:


  • Christian Marquardt
    replied
    Da du das Array ja irgendwann, irgendwie anlegst liegt doch dort die Information vor, wie tief das Array ist.
    Zuletzt editiert von Christian Marquardt; 10.01.2012, 08:36.

    Leave a comment:


  • Antz
    replied
    Habs nochmal überlegt und bin zu folgendem Ergebnis gekommen:
    Code:
    <?php
    
    function anyFunction($param = null)
    {
        $anyArray = array();
    
        $anyArray['ebene1']['ebene2']['ebene3'] = 'value';
        // [...]
    
        if ($param) {
            $items = explode(',',$param);
            mamdebug($items,'items');
    
            $max = count($items);
            $ergebnis = $anyArray[$items[0]];
    
            for ($i = 1; $i < $max; $i++) {
                $ergebnis = $ergebnis[$items[$i]];
                mamdebug($ergebnis,'ergebnis');
            }
            return $ergebnis;
        }
        else {
            return false;
        }
    }
    
    
    debug(anyFunction('ebene1,ebene2,ebene3'));
    Dennoch bin ich mit dieser Methode nicht zu frieden, scheinbar gibt es aber keine andere Möglichkeit (für eine unbekannte Tiefe des Arrays).

    Leave a comment:


  • Antz
    replied
    Jo, soweit war ich auch, jedoch ist es nciht möglich zu wissen wie viele Dimensionen das Array haben wird. von daher habe ich überlegt, ob ich einen Parameter übergeben soll, als String, und mit Kommata getrennt. Dieser wird dann per explode gesplittet, aber dann muss ich noch schauen wie ich dann je item eine Ebene, bzw Dimension weiter runterkomme. Darüber habe ich mir wohl noch keine Gedanken gemacht...

    Beispiel:
    Code:
    <?php
    
    function anyFunction($param = null)
    {
        $anyArray = array();
    
        $anyArray['item1']['value1'] = 'iv11';
        // [...]
    
        if ($param) {
            $items = explode(',', $param);
            foreach ($items AS item) {
                $ergebnis = // Je Durchlauf eine Ebene tiefer
            }
            return $ergebnis;
        }
        else {
            return false;
        }
    }
    
    $data = anyFunction('item1,value2');
    Zuletzt editiert von Antz; 09.01.2012, 13:56.

    Leave a comment:


  • Falk Prüfer
    replied
    Hallo,

    wenn du Werte aus einem zweidimensionalen Array erhalten möchtest, dann wirst du wohl ZWEI Parameter übergeben müssen:
    PHP Code:
    function anyFunction($param1 null$param2 null)
    {
        
    $anyArray = array();
        
        
    $anyArray['item1']['value1'] = 'iv11';
        ...
        
        if (
    $param1 && $param2 && isset($anyArray[$param1][$param2])) {
            return 
    $anyArray[$param1][$param2];
        }
        else {
            return 
    false;
        }
    }

    $data anyFunction('item1''value2'); 
    Gruß Falk

    Leave a comment:


  • Christian Marquardt
    replied
    Wenn der Parameter irgendein Wert darstellt, der in dem Array gespeichert ist (also im obigen Beispiel iv1x), musst du das Array durchlaufen und suchen wo der Parameter ist. Dieses Arrayelement wird dann zurückgegeben

    http://php.net/manual/de/function.array-search.php

    Leave a comment:

Working...
X