drdyszuy488152
2014-03-30 06:17
浏览 147
已采纳

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

Here is a fairly big object dumped using print_r.

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

I am trying to change the values of the uploaded_files.

Towards the end of that object you'll see something like

[uploaded_files] => Array ( [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 )

My code // move the attachments to wpcf7ev temp folder

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
}

To loop through it I have been using

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

and this has worked.

But shouldn't it be

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

? As '->' is for accessing methods?

And specifically I want to update the values of those uploaded_files, so to do that I need to do

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

? But this doesn't seem to be working.

I think I need to be clear on how to access values in an object.

Thanks.

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

  • douque8861 2014-03-30 06:28
    最佳回答

    First of all, regarding the single arrow "->" that is how you reference an objects values. But I won't get into that. Since you say it works, $cf7ev_object is obviously an object.

    You say you want to "access the values in the object".

    var_dump($cf7ev_object);
    

    This will spit out what is in that object. I gather you are a bit of a newbie, so I will try to help you out best I can with the limited data you provided (you may want to expand your question.

    Looping is not a one-shot deal. You can have nested loops and nested loops inside of those. However, it is a resource hog if you're not careful. Here is an exercise that might help you.

    $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);
    

    I hope this helps. Note: your google doc is restricted, public can't see it.. And your question is too vague. Let me know if I can help more.

    If you want to change the object array values instantly you just set it equal to the above loop result:

    $cf7ev_object->uploaded_files = $new_array;
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题