Sasha ... I'm sending this again to the list as it seemed to bounce from
your address

the way I was doing it prevents unique values from being created in the
first place. The only array that gets overwritten is one that would be the
same any way

while ($row = mysql_fetch_array($result))
{       $month = date("m", $row['timestamp']);
        $year = date("Y", $row['timestamp']);
        $archive_date = mktime(1,1,1,$month,1,$year);
        
        $archive_nav[$archive_date] = $archive_date;
}

... ensures that if the date has already been added to the array then it
overwrites the existing one instead of adding a new element.

        Tim Ward


> -----Original Message-----
> From: sasha [mailto:[EMAIL PROTECTED]]
> Sent: 20 August 2002 14:36
> To: Tim Ward
> Subject: Re: RE: array_unique & multi-dimensional arrays
> 
> 
> It may just have been that I was not putting your 
> sample code in the right location...  I had ended up 
> doing it differently than I originally intended:
> 
> while ($row = mysql_fetch_array($result)) {
>       $month = date("m", $row['timestamp']);
>       $year = date("Y", $row['timestamp']);
>       $archive_date = mktime(1,1,1,$month,1,$year);
>       
>       array_push($archive_nav, $archive_date);
> }
> $archive_nav = array_values(array_unique
> ($archive_nav));
> 
> And then later on, I do a date check on the new 
> timestamp to get the month/year/longmonth out of it.  
> Only 3 extra lines of code this way.
> 
> I don't understand exactly how your code works.  If I 
> do it inside of the while loop, it would overwrite the 
> previous contents of the array (unless I did a '.=', 
> instead of just '=').  So when I tried doing it 
> outside of the loop, all I ended up with was nothing.
> 
> thanks
> sasha
> 
> 8/20/2002 3:58:01 AM, Tim Ward 
> <[EMAIL PROTECTED]> wrote:
> 
> >array_unique tests the values of each element of the 
> top level array - which
> >are all 'array' - hence you only get one element left
> >
> >the way I'd do this is ...
> >$archive_nav["$year/$month"] = array(month => $month, 
> year => $year,
> >longmonth => $longmonth);
> >
> >this will prevent duplicate combinations of month and 
> year (and,
> >incidentally, allow you to sort on year and month 
> very easily).
> >
> >Tim Ward
> >www.chessish.com
> >
> >> -----Original Message-----
> >> From: sasha [mailto:[EMAIL PROTECTED]]
> >> Sent: 19 August 2002 19:10
> >> To: [EMAIL PROTECTED]
> >> Subject: array_unique & multi-dimensional arrays
> >> 
> >> 
> >> I am trying to clean up some junky code in a 
> journal/news type 
> >> script and redoing the archive navigation.  I am 
> pulling all of 
> >> the dates of the entries and pushing it into a 
> multi-
> >> dimensional array like so:
> >> 
> >> array_push($archive_nav, array(month => $month, 
> year => $year, 
> >> longmonth => $longmonth));
> >> 
> >> I assumed I could just use array_unique to filter 
> out all of 
> >> the duplicates in the array.  But it doesn't seem 
> to work that 
> >> way, and the only month/year combo I end up with is 
> the very 
> >> oldest one (according to year/month) in the array.
> >> 
> >> $archive_nav = array_unique($archive_nav);
> >> 
> >> If I leave out array_unique, I am getting all of 
> the 
> >> appropriate month/year combos in my script while 
> doing a 
> >> foreach... just one for every single entry in the 
> database for 
> >> that combo (which is a lot in some cases!).
> >> 
> >> Is there a better way to do this?
> >> 
> >> sasha
> >> 
> >> 
> >> 
> >
> 
> 
> 

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

Reply via email to