2010-02-24 22 views
12

एक सरणीphp पाने दो अलग यादृच्छिक सरणी तत्वों

$my_array = array('a','b','c','d','e'); 

मैं दो अलग यादृच्छिक तत्वों प्राप्त करना चाहते हैं से।

निम्नलिखित कोड के साथ

:

for ($i=0; $i<2; $i++) { 
    $random = array_rand($my_array); # one random array element number 
    $get_it = $my_array[$random]; # get the letter from the array 
    echo $get_it; 
} 

यह दो बार एक ही पत्र प्राप्त करने के लिए संभव है। मुझे इसे रोकने की जरूरत है। मैं हमेशा दो अलग-अलग सरणी तत्व प्राप्त करना चाहता हूं। क्या कोई मुझे बता सकता है कि ऐसा कैसे करें? धन्यवाद

उत्तर

6

आप उस तत्व को हमेशा हटा सकते हैं जिसे आपने पहली बार चुना था, फिर आप इसे फिर से नहीं चुनेंगे। यदि आप सरणी को संशोधित नहीं करना चाहते हैं तो एक प्रति बनाएं।

for ($i=0; $i<2; $i++) { 
    $random = array_rand($my_array); # one random array element number 
    $get_it = $my_array[$random]; # get the letter from the array 
    echo $get_it; 

    unset($my_array[$random]); 
} 
+0

अच्छा लगता है। मैं सरणी तत्व को कैसे हटा सकता हूं? – creativz

+0

'अनसेट ($ सरणी [$ कुंजी]) ' – Franz

+0

' अनसेट ($ my_array [$ random]);' – thetaiko

9

इसके बारे में क्या?

$random = $my_array; // make a copy of the array 
shuffle($random); // randomize the order 
echo array_pop($random); // take the last element and remove it 
echo array_pop($random); // s.a. 
+0

+1 तत्वों की मनमानी संख्या चुनने के लिए कोड को विस्तारित करना आसान बनाता है अधिक सुरुचिपूर्ण – Franz

+1

बहुत बड़े सरणी के लिए यह बहुत धीमा हो सकता है, हालांकि आपको निश्चित रूप से पूर्ण तत्व को दो तत्वों को प्राप्त करने की आवश्यकता नहीं है । – Joey

+0

वह कल्पना का हिस्सा नहीं था;)। – middus

-1

जाओ पहले यादृच्छिक, तो पाने के लिए एक do..while पाश का उपयोग दूसरा:

$random1 = array_rand($my_array); 
do { 
    $random2 = array_rand($my_array); 
} while($random1 == $random2); 

यह जब तक random2 random1 रूप

+0

यह 2 काम नहीं करेगा यदि 2 तत्व समान हैं – pheelicks

+0

@ फिलेक्स इसे काम करना चाहिए क्योंकि array_rand एक अनुक्रमणिका देता है, न कि तत्व स्वयं। – middus

+0

डी ओह। क्षमा करें adam – pheelicks

17

array_rand() कर सकते हैं समान नहीं है पाशन रखेंगे दो पैरामीटर, सरणी और (अलग) तत्वों की संख्या लें जिन्हें आप चुनना चाहते हैं।

मिश्रित array_rand (सरणी $ इनपुट [, पूर्णांक $ num_req = 1])
$my_array = array('a','b','c','d','e'); 
foreach(array_rand($my_array, 2) as $key) { 
    echo $my_array[$key]; 
} 
+0

मुझे यह पसंद है। हालांकि, php.net पर टिप्पणियों के अनुसार लौटा सूचकांक का क्रम इतना यादृच्छिक नहीं है। +1 वैसे भी;) – middus

+0

@ मिडस: क्या यह अभी भी PHP के हाल के संस्करणों के लिए सच है? कुछ यादृच्छिक कार्यों, esp के बारे में कई शिकायतें हुई हैं। Win32 पर। मैंने सोचा कि वे (कुछ हद तक) तय किए गए हैं। – VolkerK

+0

मुझे वास्तव में पता नहीं है। मैंने इसे स्वयं परीक्षण नहीं किया है। – middus

2
foreach (array_intersect_key($arr, array_flip(array_rand($arr, 2))) as $k => $v) { 
    echo "$k:$v\n"; 
} 

//or 

list($a, $b) = array_values(array_intersect_key($arr, array_flip(array_rand($arr, 2)))); 
1

यहाँ एक सरल समारोह मैं एक सरणी से कई यादृच्छिक तत्वों को खींचने के लिए उपयोग करते हैं।

function get_random_elements($array, $limit=0){ 

    shuffle($array); 

    if ($limit > 0) { 
     $array = array_splice($array, 0, $limit); 
    } 

    return $array; 
} 
0

यहाँ कैसे मैंने किया है। उम्मीद है कि यह किसी को भ्रमित करने में मदद करता है।

$originalArray = array('first', 'second', 'third', 'fourth'); 
$newArray= $originalArray; 
shuffle($newArray); 
for ($i=0; $i<2; $i++) { 
    echo $newArray[$i]; 
} 
संबंधित मुद्दे