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

day off;) bleh – Oritm

답변

16

사용 & 심볼을 참조로 루프에 변수를 전달. 이것은 실제 변수를 복사하는 것이 아니라 수정하는 것을 의미합니다.

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

(주, 최대 PHP 5.0이 유일한 작품 .... 당신은 여전히 ​​PHP4를 사용하는 경우, 당신은 정말 업그레이드 할 필요!) Rimmert이 걸렸다 왜 상상할 수

+1

PHP 문서는 객체가 항상 참조로 복사된다는 것을 말합니다? – Nate

+0

@Nate - OP가 배열을 통해 루핑 중입니다. 물론 배열에는 객체가 포함되어 있지만 실제 루프는 객체가 아니라 배열입니다. – Spudley

5

the docs에서 : PHP 5로

, 당신은 쉽게 $ 값을 이전하여 배열의 요소를 수정할 수 있습니다은 &입니다. 이렇게하면 값을 복사하는 대신 참조가 지정됩니다.

참조를 사용하고 현재 값에 할당하십시오.

1

이 시도 :

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

PHP References

관련 문제