2013-01-17 9 views
5

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

मैं से उपयोगकर्ता को प्रस्तुत किए गए आदेश को संग्रहीत करने के लिए प्रयास कर रहा हूं, अगर मैं उन्हें यादृच्छिक रूप से घुमाता हूं।

मैं अनुमानित रूप से उत्तरों को शफल करना चाहता हूं ताकि मैं बाद में (परिणामों को प्रदर्शित करते समय) में शफल को दोहरा सकूं।

मैंने सोचा है कि मैं किसी निश्चित संख्या से उत्तर की सूची को घुमा सकता हूं (या तो क्रम में संख्या का उपयोग कर रहा हूं, या आईडी संख्या द्वारा पहचानने योग्य कई प्रकार के प्रकार हैं। इस तरह से मैं बस नंबर को स्टोर कर सकता हूं कि वे उस नंबर को फिर से बदलकर याद कर रहे थे।

यहां मेरे पास अब तक का कंकाल है, लेकिन मेरे पास $ shuffled_array में जवाब देने के लिए कोई तर्क नहीं है शफल क्रम में

<?php 

function SortQuestions($answers, $sort_id) 
{ 
    // Blank array for newly shuffled answer order 
    $shuffled_answers = array(); 

    // Get the number of answers to sort 
    $answer_count = count($questions); 

    // Loop through each answer and put them into the array by the $sort_id 
    foreach ($answers AS $answer_id => $answer) 
    { 
     // Logic here for sorting answers, by the $sort_id 

     // Putting the result in to $shuffled_answers 
    } 

    // Return the shuffled answers 
    return $shuffled_answers; 
} 


// Define an array of answers and their ID numbers as the key 
$answers = array("1" => "A1", "2" => "A2", "3" => "A3", "4" => "A4", "5" => "A5"); 

// Do the sort by the number 5 
SortQuestions($answers, 5); 

?> 

क्या ऐसी तकनीक है जो मैं ca एन फ़ंक्शन में पारित संख्या से उत्तरों को घुमाने के लिए उपयोग करें?

+0

एक छिपे हुए इनपुट तत्व के अंदर उत्तर आदेश को "भंडारण" माना जाएगा? :) –

उत्तर

3

PHP का shuffle फ़ंक्शन srand के साथ दिए गए यादृच्छिक बीज का उपयोग करता है, ताकि आप इसके लिए एक विशिष्ट यादृच्छिक बीज निर्धारित कर सकें।

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

function shuffle_assoc(&$array, $random_seed) { 
    srand($random_seed); 

    $keys = array_keys($array); 

    shuffle($keys); 

    foreach($keys as $key) { 
     $new[$key] = $array[$key]; 
    } 

    $array = $new; 

    return true; 
} 

इस समारोह मूल कुंजी रखेंगे लेकिन एक अलग आदेश के साथ।

+0

दुर्भाग्य से 'srand' प्रति PHP प्रक्रिया केवल एक बार काम करता है। यदि आप एक ही बीज के साथ इस फ़ंक्शन को दो बार कॉल करते हैं तो आपको अलग-अलग परिणाम मिलेंगे (भले ही आपको हर बार * समान * अलग-अलग परिणाम मिलेंगे)। – Jon

+0

@ मिस्टरमार्टिन: मेरा मतलब था कि बाद में 'srand' कॉल पहले के बाद PHP प्रक्रिया की अवधि के लिए कोई प्रभाव नहीं पड़ेगा। दुर्भाग्य से मैं इसे आज पुन: पेश नहीं कर सकता और मैंने ऊपर कोई संदर्भ नहीं दिया है, इसलिए ऐसा लगता है कि यह गलत है। मैं कल इन दोनों टिप्पणियों को हटा दूंगा। – Jon

0

यह संभव तरीकों में से एक हो सकता है।

$result = SortQuestions($answers, 30); 
print_r($result); 


function SortQuestions($answers, $num) 
{ 
$answers = range(1, $num); 
shuffle($answers); 
return $answers; 
} 
2

आप सरणी को एक कारक से घुमा सकते हैं।

$factor = 5; 
$numbers = array(1,2,3,4); 
for ($i = 0; $i < $factor; $i++) { 
    array_push($numbers, array_shift($numbers)); 
} 
print_r($numbers); 

कारक बेतरतीब जा सकता है, और एक समारोह सरणी वापस जगह में, दूसरी तरह के आसपास स्विच कर सकते हैं रोटेशन से।

+0

आपके उत्तर के लिए धन्यवाद। आप '$ कारक' को परिभाषित करते हैं और कोड के भीतर इसका उपयोग नहीं करते हैं:/ – Luke

+0

हाँ, मुझे, इसे संपादित करने दें! :) – Kao

+0

यह अच्छी तरह से काम करता है, लेकिन मेरी इच्छा है कि इसे थोड़ा और यादृच्छिक बनाने का कोई तरीका हो? कोई विचार? :) – Luke

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