Re: Re: Array Sorting Headaches
| From: | Burhan Khalid | Date: | Mon, 19 Apr 2004 08:42:19 +0000 |
| Subject: | Re: Re: Array Sorting Headaches | ||
| References: | 1 2 3 4 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-183793@lists.php.net to get a copy of this message | ||
Torsten Roehr wrote:
"Burhan Khalid" <phplist@meidomus.com> wrote in message news:4083779C.6070300@meidomus.com...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.Torsten Roehr wrote:data"Burhan Khalid" <phplist@meidomus.com> wrote in message news:40828989.8030802@meidomus.com...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[ snipped ]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) {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 :(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?$tempArray = array();foreach ($value as $subkey => $subvalue) {// add expires value only to the temporary array forsorting$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.