Diff Revisions 19 vs 20 for /trunk/Php/array/array_rand.php

Diff revisions: vs.
19 20   <- Revisions
       
      Diff lines for:
 Rev 19 : Lines 1 -> 64
 Rev 20 : Lines 1 -> 127
1 1 <h1>Test de array_rand()</h1>
2 2 <pre>
3 3 <?php
4 - $arrItem = str_split('abcdefghi',1);
4 + require 'Benchmark/Timer.php';
5 + $arrItem = str_split('abcdefghi', 1);
5 6
6 - function oldRandom($arrItem)
7 + function oldRandom ($arrItem)
7 8 {
8 - $itemList=array();
9 - if (isset($arrItem)) {
10 - $items_selected_nbr = sizeof($arrItem);
11 9
12 - if ($items_selected_nbr>2) {
10 + $itemList = array();
11 + if (isset($arrItem)) {
12 + $items_selected_nbr = sizeof($arrItem);
13 13
14 - srand((double)microtime() * 1000000);
15 - $itemList[0] = rand(0,($items_selected_nbr) - 1);
14 + if ($items_selected_nbr > 2) {
16 15
17 - do {
18 - srand((double)microtime() * 1000000);
19 - $rand = rand(0,($items_selected_nbr) - 1);
20 - } while (in_array($rand, $itemList));
21 - $itemList[1] = $rand;
16 + srand((double) microtime() * 1000000);
17 + $itemList[0] = rand(0, ($items_selected_nbr) - 1);
22 18
23 - do {
24 - srand((double)microtime() * 1000000);
25 - $rand = rand(0,($items_selected_nbr) - 1);
26 - } while (in_array($rand, $itemList));
27 - $itemList[2] = $rand;
19 + do {
20 + srand((double) microtime() * 1000000);
21 + $rand = rand(0, ($items_selected_nbr) - 1);
22 + } while (in_array($rand, $itemList));
23 + $itemList[1] = $rand;
28 24
25 + do {
26 + srand((double) microtime() * 1000000);
27 + $rand = rand(0, ($items_selected_nbr) - 1);
28 + } while (in_array($rand, $itemList));
29 + $itemList[2] = $rand;
29 30
30 - $itemList[0] = $arrItem[$itemList[0]];
31 - $itemList[1] = $arrItem[$itemList[1]];
32 - $itemList[2] = $arrItem[$itemList[2]];
33 - }
31 +
32 + $itemList[0] = $arrItem[$itemList[0]];
33 + $itemList[1] = $arrItem[$itemList[1]];
34 + $itemList[2] = $arrItem[$itemList[2]];
35 + }
36 + }
37 + return $itemList;
34 38 }
35 - return $itemList;
36 - }
37 39
38 40
39 - function newRandom($arrItem)
41 + function newRandom ($arrItem, $cnt = 3)
40 42 {
41 43
42 - return array_intersect_key($arrItem, array_flip(array_rand($arrItem, min(3,count($arrItem)))));
44 + return array_intersect_key($arrItem, array_flip(array_rand($arrItem, min($cnt, count($arrItem)))));
43 45
44 46 }
45 47
48 +
49 + function getRandomElement (array $tab, $nb)
50 + {
51 +
52 + shuffle($tab);
53 + $result = array_chunk($tab, $nb);
54 + return $result[0];
55 + }
56 +
57 +
46 58 ?>
47 - </pre><h2>Je teste</h2><pre>
59 + </pre>
60 + <h2>Je teste</h2>
61 + <pre>
48 62 <?php
49 63
50 64 var_export(oldRandom($arrItem));
51 - var_export(newRandom($arrItem));
65 + var_export(newRandom($arrItem, 3));
66 + var_export(getRandomElement($arrItem, 3));
52 67
53 68 ?>
54 - </pre><h2>J'en demande plus que disponible</h2><pre>
69 + </pre>
70 + <h2>J'en demande plus que disponible</h2>
71 + <pre>
55 72 <?php
56 - var_export(oldRandom(array_slice($arrItem,0,2)));
57 - var_export(newRandom(array_slice($arrItem,0,2)));
73 + var_export(oldRandom(array_slice($arrItem, 0, 2)));
74 + var_export(newRandom(array_slice($arrItem, 0, 2), 3));
75 + var_export(getRandomElement(array_slice($arrItem, 0, 2), 3));
76 +
77 + $timer = new Benchmark_Timer();
78 + $timer->start();
79 + $amount = 500;
80 +
81 + $timer->setMarker('oldRandom');
82 + $timer->timeElapsed('Start', 'oldRandom') . "\n";
83 + for ($i = 0; $i < $amount; $i ++)
84 + oldRandom($arrItem);
85 + $timer->timeElapsed('End', 'oldRandom') . "\n";
86 +
87 + $timer->setMarker('newRandom');
88 + $timer->timeElapsed('Start', 'newRandom') . "\n";
89 + for ($i = 0; $i < $amount; $i ++)
90 + newRandom($arrItem, 3);
91 + $timer->timeElapsed('End', 'newRandom') . "\n";
92 +
93 + $timer->setMarker('getRandomElement');
94 + $timer->timeElapsed('Start', 'getRandomElement') . "\n";
95 + for ($i = 0; $i < $amount; $i ++)
96 + getRandomElement($arrItem, 3);
97 + $timer->timeElapsed('End', 'getRandomElement') . "\n";
98 + $timer->timeElapsed('Start', 'oldRandom') . "\n";
99 + for ($i = 0; $i < $amount; $i ++)
100 + oldRandom($arrItem);
101 + $timer->timeElapsed('End', 'oldRandom') . "\n";
102 +
103 + $timer->setMarker('newRandom');
104 + $timer->timeElapsed('Start', 'newRandom') . "\n";
105 + for ($i = 0; $i < $amount; $i ++)
106 + newRandom($arrItem, 3);
107 + $timer->timeElapsed('End', 'newRandom') . "\n";
108 +
109 + $timer->setMarker('getRandomElement');
110 + $timer->timeElapsed('Start', 'getRandomElement') . "\n";
111 + for ($i = 0; $i < $amount; $i ++)
112 + getRandomElement($arrItem, 3);
113 + $timer->timeElapsed('End', 'getRandomElement') . "\n";
114 +
115 + $timer->stop();
116 + $timer->display();
117 +
118 + $start = microtime(true);
119 +
58 120 ?>
59 121 </pre>
60 122 <hr />
61 123 <?php
62 124
125 +
63 126 highlight_file(__FILE__);
64 127 ?>