Re: Filling an array with random input doesn't quite work [message #185304 is a reply to message #185294] |
Mon, 17 March 2014 12:43 |
Gabriel
Messages: 11 Registered: March 2014
Karma:
|
Junior Member |
|
|
On 2014-03-17 02:16:24 +0000, Denis McMahon said:
>> I would do it like this:
>>
>> $arr = array_fill(0, 40, 0);
>> array_walk($arr, function(&$v, $k) { $v = rand(60, 69); });
>>
>> That will provide you with an array containing 40 elements, each a
>> random integer between 60 and 69:
>>
>>
>> print_r($arr);
>> Array (
>> [0] => 60 [1] => 69 [2] => 63 [3] => 63 [4] => 64 [5] => 65 [6] =>
>> 68 [7] => 67 [8] => 67 [9] => 67 [10] => 63 [11] => 69 [12] => 65
>> [13] => 60 [14] => 68 [15] => 62 [16] => 67 [17] => 65 [18] => 60
>> [19] => 65 [20] => 62 [21] => 69 [22] => 69 [23] => 64 [24] => 68
>> [25] => 65 [26] => 69 [27] => 66 [28] => 61 [29] => 69 [30] => 61
>> [31] => 61 [32] => 68 [33] => 64 [34] => 64 [35] => 63 [36] => 60
>> [37] => 63 [38] => 60 [39] => 67
>> )
>
> Yes, but what he wants is actually something like:
>
> Array
> (
> [39] => http://mroldies.net/audio/1966/66-033.mp3
> [38] => http://mroldies.net/audio/1964/64-012.mp3
> [37] => http://mroldies.net/audio/1963/63-085.mp3
> [36] => http://mroldies.net/audio/1960/60-014.mp3
> [35] => http://mroldies.net/audio/1960/60-011.mp3
> [34] => http://mroldies.net/audio/1964/64-065.mp3
Thank you for pointing that out, Dennis.
My code can be trivially modified to do this:
$arr = array_fill(0, 40, 'http://mroldies.net/audio/19%u/%u-%03u.mp3');
array_walk($arr, function(&$v, $k) { $yr = rand(60, 69); $v =
sprintf($v, $yr, $yr, rand(1, 100)); });
Will yield the following array which I have cut short to reduce noise:
print_r($arr);
Array
(
[0] => http://mroldies.net/audio/1966/66-007.mp3
[1] => http://mroldies.net/audio/1967/67-021.mp3
[2] => http://mroldies.net/audio/1962/62-016.mp3
[…]
)
Each person prefers their own solution and I am no different. I prefer
mine because I find it readable whilst only requiring two lines, of
course you could add a few more line breaks in if preferable. The
highlights for me are utilising a PHP native function to walk the array
instead of writing your own iterator using some form of while or for
loop, a lambda function for the processing, and the fantastic
formatting abilities of sprintf.
Cheers
Gabe
|
|
|