0

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.

2
  • you can loop through the foreach Commented Mar 30, 2014 at 6:19
  • you tried to make the object an array in your last example.. Play with my solution, that should work for you. Commented Mar 30, 2014 at 6:30

1 Answer 1

1

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;
Sign up to request clarification or add additional context in comments.

3 Comments

Apparently anyone could access that doc who has the link. I've updated it to be publicly accessible.
So [uploaded_files] is one of the object's values yes? So to access it I would use $cf7ev_object->uploaded_files over $cf7ev_object['uploaded_files']?
yes that is correct, do exactly what I did in my solution. it is what you are looking for. you can access an object as-if it were an array.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.