I don't have a problem with the functionality and the patch doesn't seem problematic. I do question though whether we want to add this to array_fill()? Not sure if that parameter overloading is very intuitive as it doesn't just add one parameter. What do others think? Would you prefer an array_fill_keys()?
Andi > -----Original Message----- > From: Matt W [mailto:[EMAIL PROTECTED] > Sent: Sunday, June 25, 2006 4:11 AM > To: internals@lists.php.net > Subject: [PHP-DEV] [PATCH] array_fill: Allow an array to specify keys > > Hi all, > > I'm on Windows and haven't tried submitting a patch before, > so I JUST now installed WinCvs since I don't think you want > just a diff of my local file. > I used PHP_5_1 since: 5.1's the "regular" download I started > working on; if you use it, I assume this can go in 5.1; and I > don't know what to do. :-) > > I've been casually browsing through the PHP source for a > while, but never modified it or used C. Just found out about > VC++ Express, etc. and set it up to try messing with PHP. > Had some missing file errors while building (don't know if > that's my problem, or a bug...), but got it done after > changing a few files that were causing them. Just some > background... ;-) > > Awhile ago I wished array_fill could also be used like > array_fill(array keys, mixed value), which would work like: > foreach ($keys as $k) { $array[$k] = $val; } OR $array = > array_combine($keys, array_fill(0, count($keys), $val)); > > So that's what I did for my first, admittedly simple, modification. > > I couldn't figure out a reason for the *newval variable, > since it seemed to be the same as **val (pointer stuff can > confuse me, being a C newbie ;-)). > Was I wrong to remove it? I also wasn't sure why sizeof(val) > was used in one place and sizeof(zval *) in another; but it > seems to be random after looking in array.c whether var_name > or zval * is used, so I stuck with the latter. I realize now > that they're same (right?), but it delayed me, assuming > there's a *reason* for everything. > > Other things I changed while experimenting were initializing > the return array AFTER checking the parameters so it doesn't > have to be destroyed/freed later; and I made the IS_LONG case > first in the switch () for the first parameter's type -- > isn't that logical since it's supposed to a PHP int and > probably is? :-) > > I hope it's coded correctly (feedback welcome, as basic as it > is, LOL). > Everything works like it should as far as I can tell. And > it's a lot faster of course than the other 2 methods I > mentioned for initializing arbitrary keys. Let me know if I > need to diff against a version other than 5.1 or whatever. > > > Thanks, > Matt > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php