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

如何在此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;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了