2011-05-12 51 views
9

我有循環槽發生問題的對象(stdObject)和改變的值。使用的foreach()在對象和改變的環路值

會發生什麼事是:

  • 查詢結果進來的功能。
  • 它獲取的對象的「數組」
  • 後,我需要與html_entity_decode()的對象裏面的內容進行解碼,以&等轉換成可讀的字符...

那是什麼出錯了。我不知道如何將轉換後的字符串放回到對象中。

下面是這個函數的代碼。

 
function jsonRequestHandlerUTF8($query) { 
    $id = "0"; 
    $message = errorHandler($id); 
    $a_result = array(); 
    if (mysql_num_rows($query) == 0) { 
     //Empty sql query 
     $id = '1'; 
     $a_result = jSONErrorObject($id); 
    } else { 
     //No error occurred 
     $a_result['ExceptionId'] = $id; 
     $a_result['ExceptionMessage'] = $message; 
     $a_result['Items'] = null; 
     while ($my_result = mysql_fetch_object($query)) { 
      $a_result['Items'][] = $my_result; 
     } 

     $test = $a_result['Items']; 
     foreach ($test as $v1) { 
      foreach ($v1 as $v2) { 
       $v2 = html_entity_decode($v2, ENT_QUOTES, "utf-8") . "\n"; 
// Here should be code to get the $v2 inside the object again.....     
      } 
     } 
} 
    $a_result = json_encode($a_result); 
    return $a_result; 
} 

$ a_result [ '物品']是這樣的:

 
Array 
(
    [0] => stdClass Object 
     (
      [idziekmeldingen] => 1 
      [meldingID] => 13190 
      [title] => Ziekmelding: Alex 
      [published] => 2011-05-09 
      [updated] => 2011-05-09 
      [content] => Per 9-05-2011 heeft Alex zich ziek gemeld. 
      [location] => AP 
      [institute] => CMI 
      [lastCron] => 2011-05-11 11:32:54 
     ) 

    [1] => stdClass Object 
     (
      [idziekmeldingen] => 2 
      [meldingID] => 12933 
      [title] => Ziekmelding: Rimmert 
      [published] => 2011-04-26 
      [updated] => 2011-04-26 
      [content] => Per 26-04-2011 heeft Rimmer zich ziek gemeld.Met vriendelijke groet,Luciënne Plomp 
      [location] => AP 
      [institute] => CMI 
      [lastCron] => 2011-05-11 11:32:54 
     ) 
) 
+0

我能想象,爲什麼Rimmert拿着一天休息;)bleh – Oritm 2013-05-17 12:55:26

回答

16

使用&符號變量傳遞到被引用的循環。這將意味着你正在修改實際變量而不是其副本。

foreach ($test as &$v1) { 
    foreach ($v1 as &$v2) { 
     $v2 = html_entity_decode($v2, ENT_QUOTES, "utf-8") . "\n";    
    } 
} 

(注意,在PHP 5.0及以上這僅適用....但如果你還在使用PHP4,你真的需要升級!)

+1

PHP文檔說,對象總是*通過引用複製,雖然? – Nate 2014-07-29 00:24:41

+0

@Nate - OP正在循環一個數組。當然,數組包含對象,但我們循環的實際內容是一個數組,而不是一個對象。 – Spudley 2014-07-29 06:32:23

5

the docs

隨着PHP 5的,你可以很容易地通過$值之前修改數組的元素與&。這將分配參考而不是複製該值。

使用引用,並分配到當前值。

1

試試這個:

foreach($test as &$v){ 
    foreach($v as &$v2) 
     // change value here ($v=....) 
} 

PHP References