जवाबों:
आप भी कर सकते हैं:
$k = array_rand($array);
$v = $array[$k];
यह एक ऐसा तरीका है जब आपके पास एक सहयोगी सरणी होती है।
array_rand()
Mersenne Twister जनरेटर का उपयोग करता है: rand () mt_rand () और srand () aliased से mt_srand () के लिए अन्य नाम । व्यवहार में यह अब पर्याप्त होना चाहिए।
PHP केवल इसके लिए एक फ़ंक्शन प्रदान करती है: array_rand ()
http://php.net/manual/en/function.array-rand.php
$ran = array(1,2,3,4);
$randomElement = $ran[array_rand($ran, 1)];
array_rand
फ़ंक्शन के दूसरे तर्क का डिफ़ॉल्ट मान है 1
इसलिए इसे लिखने की आवश्यकता नहीं है।
आप mt_rand () का उपयोग कर सकते हैं
$random = $ran[mt_rand(0, count($ran) - 1)];
यह एक फ़ंक्शन के रूप में अच्छी तरह से काम में आता है अगर आपको मूल्य की आवश्यकता है
function random_value($array, $default=null)
{
$k = mt_rand(0, count($array) - 1);
return isset($array[$k])? $array[$k]: $default;
}
array_rand
यह जितना होना चाहिए उतना यादृच्छिक नहीं है, इसलिए mt_rand
पसंद किया जाता है
isset
हिस्से में क्या है? यह वैसे भी सहयोगी सरणियों के लिए विफल होगा।
mt_rand
करने के rand
लिए दूसरों की तुलना में कुछ आइटम पसंद करते हैं लगता है
आप अपने सरणी से नीचे की तरह एक यादृच्छिक कुंजी का चयन करने के लिए array_rand फ़ंक्शन का उपयोग कर सकते हैं।
$array = array("one", "two", "three", "four", "five", "six");
echo $array[array_rand($array, 1)];
या आप रैंडम इंडेक्स को चुनने के लिए रैंड और काउंट फ़ंक्शन का उपयोग कर सकते हैं।
$array = array("one", "two", "three", "four", "five", "six");
echo $array[rand(0, count($array) - 1)];
लारवेल से व्युत्पन्न Collection::random()
:
function array_random($array, $amount = 1)
{
$keys = array_rand($array, $amount);
if ($amount == 1) {
return $array[$keys];
}
$results = [];
foreach ($keys as $key) {
$results[] = $array[$key];
}
return $results;
}
उपयोग:
$items = ['foo', 'bar', 'baz', 'lorem'=>'ipsum'];
array_random($items); // 'bar'
array_random($items, 2); // ['foo', 'ipsum']
कुछ नोट:
$amount
से कम या बराबर होना चाहिए count($array)
।array_rand()
चाबियाँ फेरबदल नहीं करता है (चूंकि PHP 5.2.10, 48224 देखें ), इसलिए आपकी चुनी हुई वस्तुएं हमेशा मूल क्रम में रहेंगी। shuffle()
जरूरत पड़ने पर बाद में इस्तेमाल करें ।
प्रलेखन: array_rand()
,shuffle()
संपादित करें: लारवेल फ़ंक्शन तब से बड़े पैमाने पर विकसित हो गया है, लारवेल 5.4 देखें Arr::random()
। यहाँ कुछ और विस्तृत है, बड़े हुए लारवेल फ़ंक्शन से लिया गया है:
function array_random($array, $number = null)
{
$requested = ($number === null) ? 1 : $number;
$count = count($array);
if ($requested > $count) {
throw new \RangeException(
"You requested {$requested} items, but there are only {$count} items available."
);
}
if ($number === null) {
return $array[array_rand($array)];
}
if ((int) $number === 0) {
return [];
}
$keys = (array) array_rand($array, $number);
$results = [];
foreach ($keys as $key) {
$results[] = $array[$key];
}
return $results;
}
कुछ मुख्य बातें:
ऐसा array_rand
लगता है कि फ़ंक्शन को बड़े सरणियों पर असमान वितरण है, प्रत्येक सरणी आइटम को उठाया जाने की समान रूप से संभावना नहीं है। सरणी पर फेरबदल का उपयोग करना और फिर पहला तत्व लेने से यह समस्या नहीं होती है:
$myArray = array(1, 2, 3, 4, 5);
// Random shuffle
shuffle($myArray);
// First element is random now
$randomValue = $myArray[0];
mt_rand()
हैं वे संभवतः कार्य के लिए बेहतर हैं।
प्रत्यक्ष मान प्राप्त करने के लिए फ्लिपिंग सरणी के माध्यम से एक और दृष्टिकोण।
टुकड़ा
$array = [ 'Name1' => 'John', 'Name2' => 'Jane', 'Name3' => 'Jonny' ];
$val = array_rand(array_flip($array));
array_rand
वापसी कुंजी मूल्य नहीं। इसलिए, हम मान को कुंजी के रूप में दिखा रहे हैं।
नोट: PHP की कुंजी एक अद्वितीय कुंजी है, इसलिए जब सरणी फ़्लिप की जाती है, तो कुंजी के रूप में डुप्लिकेट मान को अधिलेखित कर दिया जाएगा।
$array[array_rand($array)];
?
array_flip
डुप्लिकेट को कुंजी के रूप में हटा दें और फिर परिणाम दें ... मतलब कोई डुप्लिकेट नहीं!
$rand = rand(1,4);
या, विशेष रूप से सरणियों के लिए:
$array = array('a value', 'another value', 'just some value', 'not some value');
$rand = $array[ rand(0, count($array)-1) ];
क्या आपके चयन का कोई सुरक्षा निहितार्थ है? यदि हां, तो उपयोग करें random_int()
और array_keys()
। ( random_bytes()
केवल PHP 7 है, लेकिन PHP 5 के लिए एक पॉलीफ़िल है )।
function random_index(array $source)
{
$max = count($source) - 1;
$r = random_int(0, $max);
$k = array_keys($source);
return $k[$r];
}
उपयोग:
$array = [
'apple' => 1234,
'boy' => 2345,
'cat' => 3456,
'dog' => 4567,
'echo' => 5678,
'fortune' => 6789
];
$i = random_index($array);
var_dump([$i, $array[$i]]);
डेमो: https://3v4l.org/1joB1
यादृच्छिक कुंजी गूंज करने के लिए यादृच्छिक संख्या प्राप्त करने के लिए रैंड () का उपयोग करें। पूर्व में: 0 - 3
$ran = array(1,2,3,4);
echo $ran[rand(0,3)];
यह इन-लाइन सरणियों के साथ अच्छी तरह से काम करेगा। इसके अलावा, मुझे लगता है कि जब चीजें किसी समारोह में लपेटी जाती हैं तो चीजें बहुत अधिक और पुन: प्रयोज्य होती हैं।
function array_rand_value($a) {
return $a[array_rand($a)];
}
उपयोग:
array_rand_value(array("a", "b", "c", "d"));
PHP <7.1.0 पर, array_rand()
का उपयोग करता है rand()
, तो आप सुरक्षा या क्रिप्टोग्राफी से संबंधित किसी भी चीज़ के लिए इस फ़ंक्शन को नहीं चाहते हैं। PHP 7.1.0+ पर, इस फ़ंक्शन का उपयोग तब तक बिना किसी चिंता के rand()
करेंmt_rand()
।
मैं अपने उत्तर को ÓlafurWaage के फंक्शन से हटा रहा हूं। मैंने इसका उपयोग करने की कोशिश की थी, लेकिन जब मैं रिटर्न ऑब्जेक्ट को संशोधित करने की कोशिश कर रहा था, तो संदर्भ के मुद्दों में चल रहा था। मैंने पास करने और संदर्भ द्वारा वापस लौटने के लिए अपने फ़ंक्शन को अपडेट किया। नया कार्य है:
function &random_value(&$array, $default=null)
{
$k = mt_rand(0, count($array) - 1);
if (isset($array[$k])) {
return $array[$k];
} else {
return $default;
}
}
अधिक संदर्भ के लिए, ऑब्जेक्ट के लिए पासिंग / रिटर्निंग संदर्भ में मेरा प्रश्न देखें + ऑब्जेक्ट बदलने से काम नहीं हो रहा है
Randdom वैल्यू फॉर्म ऐरे पाने का एक सरल तरीका है ।
$color_array =["red","green","blue","light_orange"];
$color_array[rand(0,3)
अब हर बार आपको ऐरे से अलग रंग मिलेंगे ।
आपको निम्न में से एक यादृच्छिक संख्या मिलती है:
$randomValue = $rand[array_rand($rand,1)];
array_rand
उतना यादृच्छिक नहीं है जितना कि होना चाहिए