2011-05-12 13 views
9

Bir nesneyle (stdObject) döngü yaparak ve bir değeri değiştirerek bir sorun yaşıyorum. ne olurNesne arasında geçiş yapmak ve değerleri değiştirmek için foreach() öğesini kullanın.

geçerli:

  • bir sorgu sonucu işlevinde gelir. Bundan sonra bir 'dizisinde'
  • nesneyi getirir
  • Ben

olduğunu şey bu ... okunabilir karakterlere & vb dönüştürmek için html_entity_decode() ile nesne içindeki içeriğin kodunu çözmek için gereken yanlış gidiyor. Dönüştürülen dizeyi nesneye nasıl geri koyacağımı bilmiyorum.

Bu işlevin kodu şöyledir.

 
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 [ 'Öğeler'] şuna benzer:

 
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

gün kapalı;) bleh – Oritm

cevap

16

kullanımlar & sembolü referans ile döngüye değişkenleri geçmek için. Bu, bir kopyasını değil, gerçek değişkeni değiştireceğiniz anlamına gelir.

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

(not, yukarı PHP 5.0 ve bu sadece çalışır .... Hala PHP4 kullanıyorsanız ancak, sen gerçekten yenilememiz gerekiyor!) Rimmert aldı neden hayal

+1

PHP docs, nesnelerin * her zaman referansla kopyalandığını söyler mi? – Nate

+0

@Nate - OP bir diziden geçiyor. Elbette, dizi nesneler içeriyor, ama üzerinde çalıştığımız gerçek şey bir nesne değil, bir nesnedir. – Spudley

5

the docs Gönderen: PHP 5 itibariyle

, kolayca $ değerini önceki koyarak dizi elemanları değiştirebilir ile. Bu, değeri kopyalamak yerine referans atayacaktır.

Referansları kullanın ve geçerli değere atayın.

1

bu deneyin:

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

PHP References

İlgili konular