【问题标题】:Use foreach() to loop through object and change values使用 foreach() 循环对象并更改值
【发布时间】:2011-05-12 12:50:36
【问题描述】:

我在通过对象 (stdObject) 循环并更改值时遇到问题。

会发生什么:

  • 函数中有查询结果。
  • 它将对象提取到“数组”中
  • 之后,我需要使用 html_entity_decode() 对对象内部的内容进行解码,以将& 等转换为可读字符...

这就是问题所在。我不知道如何将转换后的字符串放回对象中。

这是这个函数的代码。

函数 jsonRequestHandlerUTF8($query) { $id = "0"; $message = errorHandler($id); $a_result = 数组(); if (mysql_num_rows($query) == 0) { //空sql查询 $id = '1'; $a_result = jSONErrorObject($id); } 别的 { //没有发生错误 $a_result['ExceptionId'] = $id; $a_result['ExceptionMessage'] = $message; $a_result['Items'] = null; 而 ($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"; // 这里应该是再次获取对象内部的 $v2 的代码..... } } } $a_result = json_encode($a_result); 返回$a_result; }

$a_result['Items'] 看起来像这样:

大批 ( [0] => 标准类对象 ( [idziekmeldingen] => 1 [融合ID] => 13190 [title] => Ziekmelding: 亚历克斯 [发表] => 2011-05-09 [更新] => 2011-05-09 [内容] => 根据 2011 年 9 月 5 日 heeft Alex zich ziek gemeld。 [位置] => 美联社 [研究所] => CMI [lastCron] => 2011-05-11 11:32:54 ) [1] => 标准类对象 ( [idziekmeldingen] => 2 [融合ID] => 12933 [title] => Ziekmelding: Rimmert [发表] => 2011-04-26 [更新] => 2011-04-26 [内容] => Per 26-04-2011 heeft Rimmer zich ziek gemeld.Met vriendelijke groet,Luciënne Plomp [位置] => 美联社 [研究所] => CMI [lastCron] => 2011-05-11 11:32:54 ) )

【问题讨论】:

  • 我可以想象为什么里默特请了一天假 ;) bleh

标签: php


【解决方案1】:

使用& 符号将变量通过引用传递到循环中。这意味着您正在修改实际变量而不是它的副本。

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

(请注意,这只适用于 PHP 5.0 及更高版本....但如果您仍在使用 PHP4,您真的需要升级!)

【讨论】:

  • PHP 文档说对象总是通过引用复制?
  • @Nate - OP 正在遍历一个数组。当然,数组包含对象,但我们循环的实际对象是数组,而不是对象。
【解决方案2】:

来自the docs

从 PHP 5 开始,您可以通过在 $value 前加上 & 来轻松修改数组的元素。这将分配引用而不是复制值。

使用引用并赋值给当前值。

【讨论】:

    【解决方案3】:

    试试这个:

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

    PHP References

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 1970-01-01
      • 2016-07-27
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 2020-01-14
      • 1970-01-01
      相关资源
      最近更新 更多