Date: 12/28/00
- Next message: Zeev Suraski: "Re: [PHP-DEV] License Choice: RE: [PHP-DEV] readline extension status?"
- Previous message: David Eriksson: "Re: [PHP-DEV] readline extension status?"
- In reply to: Andrei Zmievski: "[PHP-DEV] array_diff() failures"
- Next in thread: Stig Venaas: "Re: [PHP-DEV] array_diff() failures"
- Reply: Stig Venaas: "Re: [PHP-DEV] array_diff() failures"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi
On Thu, Dec 28, 2000 at 11:42:22AM -0600, Andrei Zmievski wrote:
> Stig,
>
> I've uncovered cases where array_diff() fails to produce the correct
> result. I had two identical arrays (unsorted) and I ran array_diff() on
> them, expecting to get an empty array back, but array_diff() did produce
> some differences. This stems from the fact that you sort the arrays
> yourself in the array_diff() and set the comparison function to
> SORT_REGULAR. Since the regular comparison function is
> non-deterministic, the arrays might be sorted differently depending on
> the original order of the elements.
I thought I solved this when I made it use array_type_data_compare
instead of array_data_compare. I thought SORT_REGULAR was deterministic
when the operands were of the same type, I thought that say the strings
"99" and "370" were compared as strings with "99" being the bigger, but...
What I thought I did, which I personally like better, was to compare
strings as strings, numbers as numbers, and numbers < strings.
Did you see my mail a few days ago regarding a segfault with array_unique?
As Sascha pointed out it segfaults on Solaris since the comparison isn't
transitive. As I said there, this results in the non-deterministic behavior
you're mentioning now. There I said array_type_data_compare() would fix it,
but I see now that I was wrong. It looks like array_data_compare() with
SORT_STRING works well. Looks like I can remove array_type_data_compare()
again.
BTW, in array.c it says:
/* Numbers are always smaller than strings int this function as it
* anyway doesn't make much sense to compare two different data types.
* This keeps it consistant and simple.
*
* This is not correct any more, if you want this behavior, use
* array_type_data_compare().
*/
static int array_data_compare(const void *a, const void *b)
I added the second paragraph, but I think now that all the
comments should be dropped.
There are problems with other array functions, for instance asort()
and sort(). As i wrote in the array_unique thread I get segfault on
Solaris using SORT_REGULAR in some cases. Of course the user can tell
it not to use SORT_REGULAR but I don't like the segfaults.
Stig
-- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: php-dev-unsubscribe <email protected> For additional commands, e-mail: php-dev-help <email protected> To contact the list administrators, e-mail: php-list-admin <email protected>
- Next message: Zeev Suraski: "Re: [PHP-DEV] License Choice: RE: [PHP-DEV] readline extension status?"
- Previous message: David Eriksson: "Re: [PHP-DEV] readline extension status?"
- In reply to: Andrei Zmievski: "[PHP-DEV] array_diff() failures"
- Next in thread: Stig Venaas: "Re: [PHP-DEV] array_diff() failures"
- Reply: Stig Venaas: "Re: [PHP-DEV] array_diff() failures"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

