2022年6月19日(日) 16:25 Marc <marc@mabe.berlin>:

> Hi Go Kudo,
>
> About "pickArrayKey" I don't like the behavior change on number of array
> keys to return either a single key or an array of keys.
> It would be better to have different methods for both cases.
>
> Also it does not describe the behavior if you are requesting more elements
> as in the given array.
>
> Will the returned list of keys be unique?
>
> Additionally in array_rand documentation:
>
> > If multiple keys are returned, they will be returned in the order they
> were present in the original array.
>
> Does that make sense? And would your method behave the same?
>
>
> Am 17.06.2022 21:41 schrieb Go Kudo <g-k...@colopl.co.jp>:
>
> Hi internals.
>
> An RFC has been created to fix an issue in Random Extension 5.x.
>
> https://wiki.php.net/rfc/random_extension_improvement
>
> Voting on this RFC will begin in two weeks (2022-07-02), in time for the
> PHP 8.2 Feature Freeze. (Vote finished in 2022-07-16, Feature Freeze is
> 2022-07-19)
>
> In the unlikely event that the Random Extension 5.x RFC is rejected, this
> RFC will become invalid regardless of the outcome of the vote.
>
> Best regards
> Go Kudo
>
>
>
 Hi Marc.

> It would be better to have different methods for both cases.

I agree.
The current specification is intended to be a drop-in replacement for
`array_rand()`.
A better API should be provided.

In my opinion, the ability to return a single key by value when `int $num`
is 1 is unnecessary.
I don't need the ability to return a single key by value if `int $num` is
1, since I can simply refer to the first element of the array even if it is
returned as an array.

What about a signature like `Randomizer::pickArrayKeys(array $array, int
$num): array`?
The previous behavior when `int $num` is 1 can be easily reproduced as
follows:

```php
$randomizer = new Random\Randomizer(new Random\Engine\Mt19937(1234,
MT_RAND_PHP));
[$key] = $randomizer->pickArrayKeys(['foo', 'bar', 'baz'], 1);
```php

> If multiple keys are returned, they will be returned in the order they
were present in the original array.

Perhaps there is no particular significance to this specification. I don't
think it is necessary, but considering the drop-in replacement from
array_rand(), I think it is desirable to leave it as is.

At least as of PHP 8.2, we would like to avoid BC Break as much as possible.

Best regards
Go Kudo

Reply via email to