2016-07-21 5 views
0

So habe ich eine Funktion, die durch Objekte rekursiven Schleifen, verursachen einige von Object Objekte in zum Beispiel haben die ObjektPersonObjektAdress und Puts enthalten sie in ein Array.find Array nach Schlüsseln in Array, und legen Sie Wert

so dass im Grunde kann dies eine Struktur aus einem Modell sein:

[obj] Neededforexample 
- [obj] person 
-- [prop] first-name 
-- [obj] adress 
- SomeProperty 

also die Funktion, die durch sie Schleifen abgeschlossen ist:

private static function SetPropertiesArray($class,$parentClass = null){ 
    $object = new $class; 
    $objectProperties = get_object_vars($object); 
    foreach($objectProperties as $prop => $value){ 
     //echo $prop; 
     if(class_exists($prop)){ 
      if($parentClass !== null){ 

       self::$_propertiesArray[$parentClass][$prop] = $value; 
      } 
      else{ 
       self::$_propertiesArray[$prop] = $value; 
      } 
      self::SetPropertiesArray($prop,$prop); 
     } 
     else{ 
      if($parentClass !== null){ 
       self::$_propertiesArray[$parentClass][$prop] = $value; 
      } 
      else{ 
       self::$_propertiesArray[$prop] = $value; 
      } 
     } 
    } 

    return self::$_propertiesArray; 
} 

Diese dieses Array-Ausgänge:

"NeededForExample" => array(
    "Person" => null, 
    "SomeProperty" => "Somevalue", 
    "First-name" => "Firstname", 
    "adress" => "HERE") 

Während ich will:

"NeededForExample" => array(
    "Person" => array(
    "First-name" => "firstname", 
    "adress" => array(
    "street" => "streetname" 
    ) 
), 
    "SomeProperty" => "Somevalue") 
+0

Konnten Sie 1 oder 2 Elemente im ursprünglichen Array mit Ihren Daten/Objekten posten? Dies ist so, dass wir die Struktur ein bisschen sehen können. Sie könnten ein 'var_dump()' auf Ihren Daten machen und die ersten 1 oder 2 Elemente kopieren. – Poiz

+0

{"Person": {"SurName ": null," Nachname ": null," BurgerServiceNummer ": null," Adresse ": null}," Adresse ": {" Straße ": null," ZipCode ": null," Stadt ": null," Land ": null}, "Nachricht": null} –

+1

Die Zeile 'if (class_exists ($ prop)) {'; sollte es nicht 'if (class_exists ($ class)) {'? Weil "$ prop" wie die Eigenschaft der fraglichen '$ class' aussieht und nicht die Klasse selbst ... und' get_object_vars' gibt ein Array zurück, das die Eigenschaften eines Objekts enthält ... aber nicht die Klasse selbst .... – Poiz

Antwort

1

Der folgende Code kann für Ihren Fall relevant sein. Aber Sie können es zuerst here testen.

<?php 

     $helper   = new Helper("Person", null); 
     var_dump($helper->getPropertiesArray()); 



     class Helper{ 

      protected $Message; 
      protected static $_propertiesArray = array(); 

      public function __construct($class, $parentClass) { 
       self::SetPropertiesArray($class, $parentClass); 
      } 

      private static function SetPropertiesArray($class, $parentClass = null){ 
       $object    = new $class; 
       $objectProperties = get_object_vars($object); 

       foreach($objectProperties as $prop => $value){ 
        if(!is_null($parentClass)){ 
         // CHECK IF $prop IS A CLASS... 
         if(class_exists($prop)){ 
          self::$_propertiesArray[$parentClass][$class][$prop] = self::getClassPropertiesArray($prop, $parentClass); 
         }else{ 
          self::$_propertiesArray[$parentClass][$class][$prop] = $value; 
         } 
        }else{ 
         // CHECK IF $prop IS A CLASS... 
         if(class_exists($prop)){ 
          self::$_propertiesArray[$class][$prop] = self::getClassPropertiesArray($prop, $parentClass); 
         }else{ 
          self::$_propertiesArray[$class][$prop] = $value; 
         } 

        } 
       } 

       return self::$_propertiesArray; 
      } 

      private static function getClassPropertiesArray($class, $parentClass = null){ 
       $object    = new $class; 
       $objectProperties = get_object_vars($object); 
       $arrClassProperties = array(); 

       foreach($objectProperties as $prop => $value){ 
        $arrClassProperties[$prop] = $value; 
       } 
       return $arrClassProperties; 
      } 

      public function getPropertiesArray(){ 
       return self::$_propertiesArray; 
      } 
     } 

     class Person{ 
      public $SurName = "Test Surname"; 
      public $LastName = "BurgerServiceNummer" ; 
      public $Address; 
     } 


     class Address{ 
      public $Street; 
      public $ZipCode; 
      public $City; 
      public $Country; 
     } 

DIE Var_dump OBEN PRODUZIERT ::

 array (size=1) 
      'Person' => 
      array (size=3) 
       'SurName' => string 'Test Surname' (length=12) 
       'LastName' => string 'BurgerServiceNummer' (length=19) 
       'Address' => 
       array (size=4) 
        'Street' => null 
        'ZipCode' => null 
        'City' => null 
        'Country' => null 
0

Dies ist meine Lösung

<?php 
function SearchArrayForKeyAndAdd(&$array, $given_key, $name, $data = null){ 
    foreach($array as $key => &$value){ 
     if(is_array($value)){ 
      if($key == $given_key){ 
       $value[$name] = $data; 
      } 
      else{ 
       SearchArrayForKeyAndAdd($value,$given_key, $name, $data); 
      } 

     } 
     else{ 
      if($key == $given_key){ 
       $value[$name] = $data; 
      } 
     } 
    } 
} 
$array = array(
    "person" => array(
     "Name" => "Roy Stijsiger", 
     "Adress" => null 
    ) 
); 


SearchArrayForKeyAndAdd($array,"Adress","Huisnummer",1); 

SearchArrayForKeyAndAdd($array,"Adress","Straatnaam","Nortierstraat"); 
var_dump($array); 

Dieser Dummy-Code war ^^ Dies ist der Code, Arbeits wie ich oben VV zeigte

private static function SetPropertiesArray($class,$parentClass = null){ 
     $object = new $class; 
     $objectProperties = get_object_vars($object); 
     foreach($objectProperties as $prop => $value){ 
      //echo $prop; 
      if(class_exists($prop)){ 
       if($parentClass !== null){ 
        self::SearchArrayForKeyAndAdd(self::$_propertiesArray,$parentClass,$prop,$value); 
       } 
       else{ 
        self::$_propertiesArray[$prop] = $value; 
       } 
       self::SetPropertiesArray($prop,$prop); 
      } 
      else{ 
       if($parentClass !== null){ 
        self::SearchArrayForKeyAndAdd(self::$_propertiesArray,$parentClass,$prop,$value); 
       } 
       else{ 
        self::$_propertiesArray[$prop] = $value; 
       } 
      } 
     } 

     return self::$_propertiesArray; 
    } 

    private static function SearchArrayForKeyAndAdd(&$array, $given_key, $name, $data = null){ 
    foreach($array as $key => &$value){ 
     if(is_array($value)){ 
      if($key == $given_key){ 
       $value[$name] = $data; 
      } 
      else{ 
       self::SearchArrayForKeyAndAdd($value,$given_key, $name, $data); 
      } 
     } 
     else{ 
      if($key == $given_key){ 
       $value[$name] = $data; 
      } 
     } 
    } 
Verwandte Themen