2011-05-12 48 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