如何在此PHP对象中循环并更改值?

时间:2014-03-30 06:17:56

标签: php arrays

这是一个使用print_r转储的相当大的对象。

https://docs.google.com/document/d/175RLhWlMQcyhGR6ffGSsoJGS3RyloEqo4EEHCL2H2vg/edit?usp=sharing

我正在尝试更改uploaded_files的值。

接近那个对象的末尾,你会看到类似

的东西
  

[uploaded_files] =>排列       (           [attachment] => /home2/magician/public_html/development/testing/wp-content/uploads/wpcf7_uploads/Central-Coast-Montessori-logo.jpg           [attachment2] => /home2/magician/public_html/development/testing/wp-content/uploads/wpcf7_uploads/Andrew.jpg)

我的代码         //将附件移动到wpcf7ev临时文件夹

foreach ($cf7ev_object['uploaded_files'] as $key => $uploaded_file_path) {
    $new_filepath = WPCF7EV_UPLOADS_DIR . '/' . basename($uploaded_file_path);
    wpcf7ev_debug("New file path is {$new_filepath}");
    rename($uploaded_file_path, $new_filepath);
    wpcf7ev_debug("'{$key}'is the KEY for {$uploaded_file_path}");
    wpcf7ev_debug($cf7ev_object['uploaded_files']);        
    $cf7ev_object['uploaded_files'][$key] = $new_filepath; // this is not updating
}

要循环使用我一直在使用

    foreach ($cf7ev_object->uploaded_files as $key => $uploaded_file_path) {

这已经奏效了。

但不应该是

    foreach ($cf7ev_object['uploaded_files'] as $key => $uploaded_file_path) {

?作为' - >'是用于访问方法吗?

具体来说我想更新那些uploaded_files的值,所以我需要这样做

        $cf7ev_object['uploaded_files'][$key] = $new_filepath; // this is not updating

?但这似乎没有用。

我想我需要明确如何访问对象中的值。

感谢。

1 个答案:

答案 0 :(得分:1)

首先,关于单箭头" - >"这就是你引用对象值的方式。但我不会进入那个。既然你说它有效,$ cf7ev_object显然是一个对象。

您说您希望"访问对象中的值"。

var_dump($cf7ev_object);

这将吐出该对象中的内容。我认为你是一个新手,所以我会尽力帮助你提供你提供的有限数据(你可能想扩大你的问题。

循环不是一次性交易。您可以在其中嵌套循环和嵌套循环。但是,如果你不小心,这是一种资源匮乏。这是一个可以帮助你的练习。

$new_array = array();
foreach($cf7ev_object->uploaded_files as $key => $value) {
  $new_value = $value;//do something to the $value here
  $new_array[$key] = $new_value;
}
//take a look at your work now:
print_r($new_array);

我希望这会有所帮助。注意:您的Google文档受到限制,公众无法看到它。而且您的问题太模糊了。如果我能提供更多帮助,请告诉我。

如果要立即更改对象数组值,只需将其设置为等于上面的循环结果:

$cf7ev_object->uploaded_files = $new_array;