Diff Revisions 19 vs 20 for /trunk/Php/array/array_rand.php
| 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 | ?> | |
View this file contents
View the full history
Commits for ZF_experiences:/trunk/Php/array/array_rand.php