2011-05-12 39 views
9

Tengo un problema al pasar por un objeto (stdObject) y alterar un valor.Utilice foreach() para recorrer el objeto y cambiar los valores

Lo que ocurre es:

resultado
  • una consulta viene en la función.
  • Se obtiene el objeto a un 'array'
  • Después de eso me necesitan para decodificar el contenido dentro del objeto con html_entity_decode() para convertir & etc ... con caracteres legibles

eso es lo que es yendo mal. No sé cómo volver a poner la cuerda convertida en el objeto.

Aquí está el código de esta función.

 
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 [ 'Artículos'] es el siguiente:

 
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

puedo imaginar por qué tomó la Rimmert día libre;) bleh – Oritm

Respuesta

16

uso el símbolo & de pasar las variables en el bucle por referencia. Esto significará que está modificando la variable real en lugar de una copia de la misma.

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

(nota, esto sólo funciona en PHP 5.0 y arriba .... pero si usted todavía está utilizando PHP4, que realmente necesita para actualizar!)

+1

Los documentos de PHP dicen que los objetos * siempre * se copian por referencia, ¿no? – Nate

+0

@Nate: el OP está formando un bucle en una matriz. Claro, la matriz contiene objetos, pero la cosa real en la que estamos haciendo un bucle es una matriz, no un objeto. – Spudley

5

De the docs:

A partir de PHP 5, se puede modificar fácilmente los elementos de la matriz precediendo valor $ con &. Esto asignará referencia en lugar de copiar el valor.

Use referencias y asigne en el valor actual.

1

Prueba esto:

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

PHP References

Cuestiones relacionadas