PHP -

2011-06-23 3 views
5

पर आधारित लूप के माध्यम से बहुआयामी सरणी बनाएं, एक बहुआयामी सरणी के लिए गिनती और foreach के सही संयोजन के साथ कुछ परेशानी आ रही है।PHP -

मैं वर्तमान में मेरे db के प्राप्त परिणाम से एक साहचर्य सरणी बनाने के लिए निम्नलिखित कर रहा हूँ:

$sql = "SELECT g.id, g.shortname FROM games g ORDER BY g.id ASC"; 
     $query = $this->db->query($sql); 

     if($query->num_rows() > 0): 
      foreach($query->result() as $row): 
       $data[$row->id] = $row->shortname; 
      endforeach; 
     return $data; 
     else: 
      return false; 
     endif; 
निश्चित रूप से

यह पैदा करता है निम्नलिखित सरणी (जो ठीक काम करता है; अर्द्ध अशुद्ध कोड):

array ([1] => CoolGame, [2] => AnotherGame, [3] => BetterGame, [4] => UglyGame) 

.... और इतने

लेकिन क्या मैं हो जाता है ताकि तरह एक बहुआयामी सरणी के माध्यम से समूहों में परिणाम (गिनती var/सीमक के आधार पर) को तोड़ने है क्या करना चाहते हैं पर:

array (Group 1 => 
     array([1] => CoolGame [2] => AnotherGame), 
     Group 2 => 
     array([3] => BetterGame [4] => UglyGame) 
) 
ताकि उदाहरण में

, मेरे $depth_count = 2;

मामले में किसी को भी रुचि रखते हैं, मैं इस एक बहु के लिए स्वत: जनरेट <optgroup> टैग के साथ काम करने के लिए सीआई के फार्म सहायक के form_multiselect() फ़ंक्शन के माध्यम से चयन कर रहा हूँ है। इसके लिए अनुमति देने के लिए मेरे PHP को ट्वीव करने में कुछ मदद चाहिए। धन्यवाद!

उत्तर

7

आप php की array_chunk विधि का उपयोग कर सकते हैं। नीचे संशोधित कोड में इसका उपयोग ध्यान दें:

if($query->num_rows() > 0): 
    foreach($query->result() as $row): 
     $data[$row->id] = $row->shortname; 
    endforeach; 

    $data = array_chunk($data, 2); 

return $data; 
+0

+1, टॉच। मैं उस समारोह के बारे में भूल गया। मुझे वास्तव में यह पसंद है, अगर यह मनमाने ढंग से समूहबद्ध है। –

+0

+1 array_chunk (सरणी के साथ खेलते समय बहुत उपयोगी फ़ंक्शन :)) –

+0

कूल सामान। पूरी तरह से काम करता है और इस तथ्य को छोड़कर पूरा समाधान होगा कि यह संख्यात्मक रूप से अनुक्रमित सरणी कुंजी बनाता है। मैं वास्तव में तथ्य के बाद सरणी पर फिर से शुरू कर सकता हूं और प्रत्येक कुंजी नाम में "समूह" को प्रीपेड कर सकता हूं। – k00k

1
$nGroup = 1; $curGroup = ''; 
$nRow = 0; 
foreach ($query->result() as $row){ 
    if ($nRow++ % 2 == 0){ // change 2 to your limiter 
    $curGroup = 'Group ' . $nGroup++; 
    $data[$curGroup] = array(); 
    } 
    $data[$curGroup][$row->id] = $row->shortname; 
} 

ऐसा कुछ? जिस पंक्ति पर आप हैं, उसका वर्तमान समूह, और समूह का नाम ट्रैक करें। फिर, हर दूसरे (या एनएच) सेट, समूह स्विच करें।

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

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