Torsten Roehr wrote:

"Burhan Khalid" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]

Torsten Roehr wrote:


"Burhan Khalid" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]


Greetings everyone :

 Having a hard time with this one. I have a multi-dim array
$foo[$x][$y]['key'], where $x and $y are numeric. Here is some sample

data


[ snipped ]


I need to filter the results so that I get the latest expiry date for
each product.  The expires field actually contains a timestamp.  So for
the sample array above, the resultant array would have only keys 0 and
2, filtering out all the rest.  There are around 180+ main entries, with
any number of sub entries, but each sub entry has the same four keys.

Any ideas? Getting a rather large headache mulling over this.


Hi,

as your structure is always the same you could just loop through all
elements and subelements and use unset() to remove the unwanted array
elements:

foreach ($foo as $key => $value) {

foreach ($value as $subkey => $subvalue) {

               // put your check logic here
               if ($foo[$key][$subkey]['expires'] == '') {

                  unset($foo[$key][$subkey]);
               }
       }
}

What do you think?

Well this is what I have right now, but the problem is the logic which checks to see for each domain which is the last expired date. I have three nested for loops right now, and not getting anywhere :(


Maybe it works if you put the expires value in a seperate array, sort it and
then you can get the key of the first one and use unset():

foreach ($foo as $key => $value) {

$tempArray = array();

foreach ($value as $subkey => $subvalue) {

                 // add expires value only to the temporary array for
sorting
                 $tempArray[$subkey] = $foo[$key][$subkey]['expires'];
         }

         // sort array by value descending
         arsort($tempArray);

         // get first (and therefore highest timestamp) key/value pair
         $firstEntry = each($tempArray);
         $notneededSubkey = $firstEntry['key'];

         // now unset the array value with the not needed subkey
         unset($foo[$key][$notneededSubkey]);
}

Have not tried it but may work. Hope you see my point.

Well, it does some sorting, but not quite what I'm after :(


I've managed to get the list so that all the (sub) entries are sorted in the correct order. Now its just a matter of finding the highest expire date for /each/ domain, and delete the other entries for that domain. So, in the end, all that's left is one entry per domain, with its latest expire date.

Hopefully this makes it a bit clearer.

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



Reply via email to