2012-12-09 34 views
5

घंटे पिछले कुछ के लिए, मैं असफल php कोड पता लगाने की तीन कॉलम में एक सूची प्रदर्शित करने के लिए इतना है कि यह इस आदेशphp का उपयोग कर तीन कॉलम में एक सूची कैसे प्रदर्शित करें?

A D G 
B E H 
C F I 

है की कोशिश कर रहा है, लेकिन मैं वास्तव में खो रहा हूँ। क्या कोई मुझे इस बारे में सहायता कर सकता है? मैं वर्तमान में केवल कोड है कि इस आदेश

A B C 
D E F 
G H I 

में सूचीबद्ध करता है, तो यह मेरे वर्तमान कोड है:

echo '<table><tr>'; 
foreach ($categories as $k => $category) { 
    if ($k % 3 == 0 && $k ! = 0) { 
     echo '</tr><tr>'; 
    } 
    echo '<td><a href="category.php?category='.$category["id"].'">'.$category["category"].'</a></td>'; 
} 
echo '</table>'; 
+0

क्या वे हमेशा उपयोग किए जाने वाले नंबर होंगे? –

+0

दरअसल, उपयोग में, वे केवल पत्र होंगे। –

+0

देखें [स्टैक ओवरफ्लो।com/प्रश्न/6938094/डेटा-से-डेटाबेस-साथ-foreach-से-ऊपर से नीचे # 6938762] (http://stackoverflow.com/questions/6938094/data-from-database-with-foreach-from -top करने वाली नीचे # 6,938,762)। – Sean

उत्तर

4

इस प्रयास करें:

$columns = 3; 
$rows = ceil(count($categories)/$columns); 

echo '<table>'; 

for ($row = 0; $row < $rows; $row++) { 
    echo '<tr>'; 

    foreach ($categories as $k => $category) { 
     if ($k % $rows == $row) { 
      echo '<td><a href="category.php?category='.$category["id"].'">'.$category["category"].'</a></td>'; 
     } 
    } 

    echo '</tr>'; 
} 

echo '</table>'; 

यह नहीं बहुत ही कुशल है, लेकिन अभी मैं ऐसा करने के बेहतर तरीके से नहीं सोच सकते हैं।

+0

बहुत बहुत धन्यवाद! यह बहुत अच्छा काम करता है! मेरा डेटासेट इतना बड़ा नहीं है इसलिए यह अच्छा होना चाहिए। –

4

आप सूची स्तंभों में गाया के रूप में इंगित करना चाहते हैं, तो आप इसे तार्किक क्रम में उत्पन्न कर सकता है और सिर्फ सीएसएस columns संपत्ति स्तंभों में स्थापित करने के लिए उपयोग करता है:

ul { 
    -moz-column-count: 2; 
    -webkit-column-count: 2; 
    column-count: 2; 
} 

बुरी खबर है कि यह आईई 9 और इससे पहले समर्थित नहीं है, लेकिन कॉलम पॉलीफिल css3-multi-column.js जैसे साधारण मामलों में पर्याप्त रूप से अच्छी तरह से काम कर सकते हैं (उनकी सीमाओं और मुद्दों के बावजूद)।

3

मैं इस एक ही मुद्दा था, और मैं निम्नलिखित कारणों से इस वर्ष सवाल करने के लिए अपने उत्तर पोस्ट कर रहा हूँ:

  1. मेरा जवाब अधिक सामान्य और आसान दूसरों अनुकूल करने के लिए के लिए है।
  2. मेरी सरणी एक स्ट्रिंग कुंजी के साथ सहयोगी थी। बीटीडब्ल्यू, मेरा जवाब दोनों सहयोगी और अनुक्रमित सरणी के लिए काम करेगा।
  3. मैं इस विषय पर कुछ अन्य उत्तरों की तरह एक जटिल सीएसएस समाधान नहीं चाहता था। दरअसल, जिस समाधान के साथ मैं आया था वह बहुत आसान था - एक विशाल तालिका के अंदर शैली = "फ्लोट: बाएं" के साथ कई टैग का उपयोग करें। जबकि मुझे संदेह था कि एक ही टेबल में एकाधिक टैब टैग होने से HTML सत्यापन हो जाएगा, वास्तव में यह त्रुटियों के बिना पास हो गया था।

कुछ बातें ध्यान रखें:

  • $ numCols स्तंभों की अपनी वांछित संख्या है।
  • चूंकि हम फ़्लोटिंग आइटम हैं, इसलिए आपको अपनी स्थिति के आधार पर पैरेंट तत्वों की चौड़ाई और न्यूनतम चौड़ाई सेट करने की आवश्यकता हो सकती है और/या कुछ < br शैली = "स्पष्ट: दोनों"/> जोड़ सकते हैं।

    function sortVertically($data = array()) 
    { 
        /* PREPARE data for printing */ 
        ksort($data);  // Sort array by key. 
        $numCols = 3; // Desired number of columns 
        $numCells = is_array($data) ? count($data) : 1 ; 
        $numRows = ceil($numCells/$numCols); 
        $extraCells = $numCells % $numCols; // Store num of tbody's with extra cell 
        $i   = 0; // iterator 
        $cCell  = 0; // num of Cells printed 
        $output  = NULL; // initialize 
    
    
        /* START table printing */ 
        $output  .= '<div>'; 
        $output  .= '<table>'; 
    
        foreach($data as $key => $value) 
        { 
         if($i % $numRows === 0) // Start a new tbody 
         { 
          if($i !== 0)   // Close prev tbody 
          { 
           $extraCells--; 
           if ($extraCells === 0) 
           { 
            $numRows--;  // No more tbody's with an extra cell 
            $extraCells--; // Avoid re-reducing numRows 
           } 
           $output .= '</tbody>'; 
          } 
    
          $output .= '<tbody style="float: left;">'; 
          $i = 0;     // Reset iterator to 0 
         } 
         $output .= '<tr>'; 
          $output .= '<th>'.$key.'</th>'; 
          $output .= '<td>'.$value.'</td>'; 
         $output .= '</tr>'; 
    
         $cCell++;     // increase cells printed count 
         if($cCell == $numCells){ // last cell, close tbody 
          $output .= '</tbody>'; 
         } 
    
         $i++; 
        } 
    
        $output .= '</table>'; 
        $output .= '</div>'; 
        return $output; 
    } 
    

    मैं आपको यह उत्तर उपयोगी पाते हैं आशा:

  • वैकल्पिक छंटाई तरीकों के लिए
  • , देख http://php.net/manual/en/array.sorting.php

यहाँ मेरा पूरा जवाब है।