2009-08-07 10 views
9

मुझे पता है कि एक किसी सरणी से यादृच्छिक आइटम का चयन कैसे करें, लेकिन दस बीस आइटमों की एक सरणी से यादृच्छिक आइटम कैसे करें? (PHP में)मैं PHP में किसी सूची से 10 यादृच्छिक चीज़ों का चयन कैसे करूं?

यह थोड़ा और जटिल बनाता है कि प्रत्येक आइटम में वास्तव में दो भाग होते हैं: एक फ़ाइल नाम, और विवरण। असल में, यह एक वेबपृष्ठ के लिए है जो हर बार जब आप पुनः लोड करते हैं तो दस यादृच्छिक छवियां प्रदर्शित करेंगे। इस डेटा का वास्तविक प्रारूप वास्तव में कोई फर्क नहीं पड़ता है, हालांकि यह इतना आसान है कि मैं इसे डेटाबेस सेट अप करने के बजाय फ्लैट-टेक्स्ट या यहां तक ​​कि हार्ड कोड में रखना पसंद करूंगा। (यह भी अक्सर बदलने के लिए मतलब नहीं है।)

बोनस सवाल है, यकीन है कि अगर मैं सिर्फ अभी तक यह करने के लिए जा रहा हूँ नहीं है - लेकिन कैसे आप प्रविष्टियों, इस तरह के कुछ वस्तुओं है कि हमेशा उठाया पाने वजन होता है, या कम से दूसरों की तुलना में कम से कम अक्सर?

धन्यवाद।

उत्तर

16

php में एक सरणी से एक या अधिक यादृच्छिक आइटम का चयन करने के लिए: http://us3.php.net/manual/en/function.array-rand.php

कैसे करना है यादृच्छिक भारित तत्वों:
http://20bits.com/articles/random-weighted-elements-in-php/

+0

काम करता है मुझे नहीं पता था कि array_rand एक सरणी से एक से अधिक प्रविष्टियों का चयन कर सकता है, लेकिन यह मेरे लिए बहुत अच्छा काम करता है। – saikofish

+0

array_rand खेदजनक रूप से आपको मानों की एक सरणी मिलती है, कुंजी नहीं।इसका मतलब है, या तो बहुत सारे फर्जी मूल्य (यदि स्थिर सेट और प्रदर्शन राजा है): {'shoes' => 1, 'clothes' => 1, 'foo' => 1) या आंतरिक सरणी_फ्लिप का उपयोग करें (प्रदान किया गया है मूल्य-तब-कुंजी अद्वितीय हैं)। –

+0

20 बिट्स-लिंक टूटा हुआ है, हालांकि [stackoverflow.com/questions/4726281 ](httpoverflow.com/questions/4726281) –

0
<?php 
$inarray = range(0,100); 
shuffle($inarray); 
$outarray = array_slice($inarray, 0, 20); 
?> 
21

आप सरणी shuffle सकते हैं और फिर पहले लेने array_slice के साथ दस तत्व:

shuffle($array); 
$tenRandomElements = array_slice($array, 0, 10); 
0

PHP में सरणी की एक सरणी एक अच्छी रणनीति होनी चाहिए। आप (हार्ड कोड किए गए एक्सएमएल, आदि) आप की तरह किसी भी तरह से इन सरणी के लिए डेटा रखने के लिए और इस तरह के रूप सरणियों में यह व्यवस्था कर सकते हैं:

Array { 
    Array (item0) { filename,description, weight,...} 
    Array (item1) { filename,description, weight,...} 
    Array (item2) { filename,description, weight,...} 
} 

फिर आप array_rand समारोह का उपयोग कर सकते बेतरतीब ढंग से आइटम निकालने की सरणी प्रत्येक प्रविष्टि के लिए वजन मान बनाना आपको किसी प्रकार की प्राथमिकता रणनीति का उपयोग करके दूसरे पर एक प्रविष्टि लेने की अनुमति देगा (उदाहरण के लिए यादृच्छिक रूप से सरणी से 2 आइटम प्राप्त करें, वजन की जांच करें, अधिक वजन वाले एक को चुनें और दूसरे को प्रतिस्थापित करें)

3

उदाहरण # 1 array_rand() उदाहरण

<?php 
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank"); 
$rand_keys = array_rand($input, 2); 
echo $input[$rand_keys[0]] . "\n"; 
echo $input[$rand_keys[1]] . "\n"; 
?> 
0

बोनस सवाल जवाब: Roulette Wheel selection पर एक नजर डालें। वेबसाइट जेंटिक एल्गोरिदम के बारे में बात करती है, लेकिन चयन विधियां ध्वनि होती हैं और विचारों की एक श्रृंखला पर लागू की जा सकती हैं।

0

मेरे पास कुछ कोड है जो आप पूछते हैं। मैं एक पाठ फ़ाइल में प्रायोजन लिंक की एक सूची संग्रहीत करता हूं, और उन्हें यादृच्छिक रूप से चुनता हूं। लेकिन, अगर मैं सेट तिरछा करना चाहते हैं, मैं कई का उपयोग लिंक ;-)

प्रायोजक दायर:

<a href="http://www.example.com">Example</a> 
<a href="http://www.example.com">Example</a> 
<a href="http://www.bbc.co.uk">BBC</a> 
<a href="http://www.google.com">Google</a> 

पीएचपी:

$sponsor_config = 'sponsors.txt'; 
$trimmed = file($sponsor_config, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
$op = array(); 

$limit = 20; // insurance 
$loops = 0; 
$needed = 4; 
$op[] = '<div id="sponsorship"><!-- start sponsorship -->'; 
$selected = array(); 
while ((count($selected) < $needed) AND ($loops <= $limit)) { 
    $choice = rand(0, count($sponsors)-1); 
    if(!in_array($sponsors[$choice], $selected)) $selected[] = $sponsors[$choice]; 
    $loops++; 
} 

foreach($selected as $k => $selection) { 
    $op[] = '<p class="sponsorship bg_'.($k%3+1).'">Click the link below to<br />visit our Site Sponsor:<br />'.$selection.'</p>'; 
} 

$op[] = '</div><!-- end sponsorship -->'; 
return join("\n",$op)."\n"; 

वी त्वरित और वी.वी. गंदे ... लेकिन यह

+0

सभी की मदद के लिए धन्यवाद। मैंने फैसला किया है कि, अब, एक भारोत्तोलन योजना का उपयोग करने के बजाय, जिन्हें मैं हर समय दिखाना चाहता हूं, केवल सरणी में प्रवेश नहीं किया जाएगा, और जो लोग यादृच्छिक रूप से दिखाई देंगे वे सरणी से चुने जाएंगे। – saikofish

संबंधित मुद्दे