2011-08-02 96 views
0

我有這個數組原則來處理多對多的形式,並將其保存到數據庫,但我的代碼不能正常工作,因爲只創建一個對象的實例,然後重寫整個數組迭代時:如何在php中迭代數組時創建一個對象的differenet實例?

$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'; 
}}} 

如果我的方法是錯誤的什麼是正確的方法來創建一個對象而不明確定義它?

+0

它看起來像你正在創建1個對象,然後迭代和重寫。也許你應該在最後一個嵌套循環中創建對象。 – pqsk

+1

你可以重構你的代碼,所以更容易理解別人嗎?我看到3個嵌套'foreach'和變量'$ value'到'$ value3','$ key'到'$ key3' – KingCrunch

+1

我們需要了解他在做什麼?這個問題很明顯,通過引用單個對象不斷創建而不是創建新對象...... – Wrikken

回答

1

創建這些對象的數組:

$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

快速優化'$ i = $ i +'1';'爲'$ i = 1;'和' ++ $ i'(不要讓php做所有類型的轉換)。你知道你想要把它放在那裏。 –

2

你可以只建立在循環一個新的,似乎「清潔」 /更清晰到下一個編碼器,除非構造是相當沉重的一個不需要重複。這將得到我的投票。如果你想對象的副本,使用clone

.... 
    foreach ($value2 as $key3 => $value3) { 
     $curAdress = clone $addressObject; 
     $curAdress->$key3 = $value3; 
     $account->getAddresses()->add($curAdress); 
     $this->em->persist($curAdress); 
0

在決賽中嵌套循環創建對象。

$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'; 
    } 
} 
} 
相關問題