Как создать разные экземпляры объекта из одного класса при итерации массива в php? - PullRequest
0 голосов
/ 03 августа 2011

У меня есть этот массив для доктрины, чтобы обработать форму многие ко многим и сохранить ее в БД, но мой код не работает, потому что создается только один экземпляр объекта, а затем переписывается при итерации по массиву:

$i = '1';
foreach ($myarray as $key => $value) {
  foreach ($value as $key2 => $value2) {
    $addressObject = new \Entities\Clientaddress();
    foreach ($value2 as $key3 => $value3) {
      $addressObject ->$key3 = $value3;
      $account->getAddresses()->add($addressObject);
      $this->em->persist($addressObject );
      $i = $i + '1';
}}}

Если мой подход неверен, каков правильный подход к созданию объекта без его явного определения?

Ответы [ 3 ]

2 голосов
/ 03 августа 2011

Вы можете просто создать новый в цикле, который кажется «чище» / более разборчивым для следующего кодера, если конструктор не очень тяжелый, который не нуждается в повторении. Это получило бы мой голос. Если вам нужны копии объектов, используйте clone:

  ....
  foreach ($value2 as $key3 => $value3) {
      $curAdress = clone $addressObject;
      $curAdress->$key3 = $value3;
      $account->getAddresses()->add($curAdress);
      $this->em->persist($curAdress);
1 голос
/ 03 августа 2011

создать массив из этих объектов:

    $addressObject = array();
    $i = '1';
    foreach ($myarray as $key => $value) {
         foreach ($value as $key2 => $value2) {

             // create array of objects here
             $addressObject[$key2] = new \Entities\Clientaddress();

             foreach ($value2 as $key3 => $value3) {
                 $addressObject[$key2] ->$key3 = $value3;
                 $account->getAddresses()->add($addressObject[$key2]);
                 $this->em->persist($addressObject[$key2] );
                 $i = $i + '1';
             }
         }
    }
0 голосов
/ 03 августа 2011

Создайте свой объект в последнем вложенном цикле.

$i = '1';

 foreach ($myarray as $key => $value)
{ 
 foreach ($value as $key2 => $value2)
 { 
  foreach ($value2 as $key3 => $value3)
 {
   //create your object here
   $addressObject = new \Entities\Clientaddress();  
   $addressObject ->$key3 = $value3; 
   $account->getAddresses()->add($addressObject); 
   $this->em->persist($addressObject ); 
   $i = $i + '1'; 
  }
 }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...