[PHP] Modifying arrays in place that are stdClass arrays

2009-04-06 Thread Lists
Hello, I have not had a lot of opportunity to deal with stdClass
objects in php.  This should be a simple one.  I have been plagued
with failure for far too many hours, so I bring it to the more
experienced.

I have $result = imap_fetch_overview(...) which returns a large
stdClass object, depending on the imap mail that I am reading.  I do
no think anyone need know anything about IMAP functions to help me on
this one.

Here is the result of the $result as a print_r()
http://pastebin.com/f4aee86ef

As you can see, there is one outer object, inside that are two iner
parts objects, the second part object has sub parts.  My goal is
to inject into the front of those, a new set of values.

 foreach ($structure-parts as $key = $val) {

  // Inject this to the replace the stdClass parts array
  $part_array[] = array('partnumber' = ($key + 1),
'part_object' = $val);

 }

So far, that works to add in two new items to the beginning of the
outer two objects.   I get something like this
[0] = Array
(
[partnumber] = 1
[part_object] = stdClass Object
.

   [1] = Array
(
[partnumber] = 2
[part_object] = stdClass Object
.

Now on item [1] in the above, there is a sub [part], containing 7
[parts] objects.  I want to make the same in place modifications to
those, adding in an item of [partnumber] and the key number I am at.

* I am going to do more to those added in values, but this distills it
down to my core issue.  In short, those parts need numbers, which are
then fed to another IMAP function to read out those specific parts of
an email. These objects can contain anywhere from 0 to a large number
of sub parts, depending on the complexity of the email, if it has
attachments, and if those attachments are also emails.

I have been playing around with this inside the main loop, but it puts
the partnumber in a place that is not correct.
  // There are sub parts
  if (count($val-parts)  0) {
   foreach ($val-parts as $key2 = $val2) {
//$part_array[1] = array('partnumber' = ($key2 +
1), 'part_object' = $val2);
   }
  }

Thanks for any guidance.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Modifying arrays in place that are stdClass arrays

2009-04-06 Thread Jim Lucas

Lists wrote:

Hello, I have not had a lot of opportunity to deal with stdClass
objects in php.  This should be a simple one.  I have been plagued
with failure for far too many hours, so I bring it to the more
experienced.

I have $result = imap_fetch_overview(...) which returns a large
stdClass object, depending on the imap mail that I am reading.  I do
no think anyone need know anything about IMAP functions to help me on
this one.

Here is the result of the $result as a print_r()
http://pastebin.com/f4aee86ef

As you can see, there is one outer object, inside that are two iner
parts objects, the second part object has sub parts.  My goal is
to inject into the front of those, a new set of values.

 foreach ($structure-parts as $key = $val) {

  // Inject this to the replace the stdClass parts array
  $part_array[] = array('partnumber' = ($key + 1),
'part_object' = $val);

 }

So far, that works to add in two new items to the beginning of the
outer two objects.   I get something like this
[0] = Array
(
[partnumber] = 1
[part_object] = stdClass Object
.

   [1] = Array
(
[partnumber] = 2
[part_object] = stdClass Object
.

Now on item [1] in the above, there is a sub [part], containing 7
[parts] objects.  I want to make the same in place modifications to
those, adding in an item of [partnumber] and the key number I am at.

* I am going to do more to those added in values, but this distills it
down to my core issue.  In short, those parts need numbers, which are
then fed to another IMAP function to read out those specific parts of
an email. These objects can contain anywhere from 0 to a large number
of sub parts, depending on the complexity of the email, if it has
attachments, and if those attachments are also emails.

I have been playing around with this inside the main loop, but it puts
the partnumber in a place that is not correct.
  // There are sub parts
  if (count($val-parts)  0) {
   foreach ($val-parts as $key2 = $val2) {
//$part_array[1] = array('partnumber' = ($key2 +
1), 'part_object' = $val2);
   }
  }

Thanks for any guidance.



Ok, since you didn't show us your complete/intact code, I will try and mash 
things together...

?php

#...

foreach ($structure-parts as $key = $val) {
// Inject this to the replace the stdClass parts array
$part_array[$key] = array('partnumber' = ($key + 1), 'part_object' = 
$val);
// There are sub parts
if ( count($val-parts)  0 ) {
foreach ($val-parts as $key2 = $val2) {
$part_array[$key]['parts'][$key2] = array('partnumber' = 
($key2 + 1), 'part_object' = $val2);
}
}
}

print_r($part_array);

the above should result in something like the following

[0] = Array
(
[partnumber] = 1
[part_object] = stdClass Object
[parts] = Array
 (
 [0] = Array
  (
  [partnumber] = ###
  [part_object] = /object.../
  )
 ...
 )
.

[1] = Array
(
[partnumber] = 2
[part_object] = stdClass Object
.


But anyways, my example output might be off a little, but I should be close.

give it a try...

Jim

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php