2011-10-12 11 views
6

मैं एक सरणी कि पहले से ही सभी वर्णमाला के क्रम में यह मान शामिल है:PHP का उपयोग कर वर्णमाला अक्षरों के तहत एक ऐरे कैसे प्रदर्शित करें?

Alligator 
Alpha 
Bear 
Bees 
Banana 
Cat 
Cougar 

अब मैं सिर्फ प्रत्येक पहले अक्षर सूचीबद्ध करना चाहते हैं तो लगता है कि यह ऊपर के साथ शुरू होता:

A 
--- 

Alligator 
Alpha 

B 
--- 

Bear 
Bees 
Banana 

C 
--- 

Cat 
Cougar 

etc... 

कैसे कर सकता है यह सामाप्त करो?

उत्तर

22

समाधान, एक चर में पहले से मुद्रित शब्द के पहले अक्षर को रखने के लिए है की तरह:

$previous = null; 
foreach($array as $value) { 
    $firstLetter = substr($value, 0, 1); 
    if($previous !== $firstLetter) echo "\n".$firstLetter."\n---\n\n"; 
    $previous = $firstLetter; 

    echo $value."\n"; 
} 

एनबी: अगर कुछ प्रविष्टियों एक लोअर केस अक्षर और ऊपरी के साथ अन्य लोगों के साथ शुरू केस अक्षर, के बजाय परीक्षण में strcasecmp फ़ंक्शन का उपयोग करें।

+0

धन्यवाद इस समाधान के लिए! यह आज रात मेरी मदद की। – Steve

0

सरणी के माध्यम से Iterate और जांचें कि वर्तमान आइटम पिछले एक से दूसरे अक्षर के साथ शुरू होता है या नहीं। अगर यह मामला आपके "ए ---" प्रिंट करता है।

$currentLetter = ''; 
foreach ($list as $item) { 
    $firstLetter = substr($item, 0, 1); 
    if ($firstLetter !== $currentLetter) { 
     echo $firstLetter . "\n---\n"; 
     $currentLetter = $firstLetter; 
    } 
    echo $item . "\n"; 
} 
1

ठीक है मेरे पास तीन समाधान हैं। 1) सभी वर्णमाला युक्त एक और सरणी बनाएं। फिर इस सरणी के माध्यम से फिर से शुरू करने के लिए foreach का उपयोग करें। और नेस्टेड फोरैच में PHP के स्ट्रॉप्स विधि के माध्यम से उस पत्र के अवसर के लिए जांच करें। यहां कोई मोटा कोड है।

<?php 
$alphabets = array ("A","B","C"....); //for all alphabtes 
foreach($alphabets as $alphabet) 
{ 
    echo $alphabet; 
    foreach($myArray as $arr) 
    { 
     $pos = strpos($arr, $alphabet); 
     if($pos===flase) 
     { 
      //do nothing 
     } 
     else 
     { 
      echo $arr; 
     } 
} 
?> 

2) दूसरी विधि के ऊपर जैसा ही तर्क है। लेकिन यहां आपको अक्षर के लिए सरणी बनाने की आवश्यकता नहीं है। आप इस तरह से सभी अक्षर प्राप्त कर सकते हैं।

<?php 
foreach(range('a', 'z') as $letter) { 
    echo $letter; 
} 
?> 

Php range method

3) तीसरा समाधान भी दो से ऊपर के रूप में ही तर्क है। यहाँ आप एक और तरीका है :)

for ($i=65; $i< =90; $i++) { 
$x = chr($i); 
print $x; 
} 
2
यहाँ

द्वारा अक्षर प्राप्त कर सकते हैं एक और सरल उपाय है: -

$result = array(); 
foreach ($list as $item) { 
    $firstLetter = substr($item, 0, 1); 
    $result[$firstLetter][] = $item; 
} 

echo "<pre>"; print_r($result); 

आउटपुट: -

Array (
[A] => Array 
    (
     [0] => Alligator 
     [1] => Alpha 
    ) 

[B] => Array 
    (
     [0] => Bear 
     [1] => Bees 
     [2] => Banana 
    ) 

[C] => Array 
    (
     [0] => Cat 
     [1] => Cougar 
    ) 
) 
0

HTML आउटपुट के लिए:

<h3>A</h3> 
<ol> 
    <li> 
     <em>tag count</em> 
     <a href="link to tag">Animal</a> 
    </li> 
    <li> 
     <em>tag count</em> 
     <a href="link to tag">Aqua</a> 
    </li> 
    <li> 
     <em>tag count</em> 
     <a href="link to tag">Arthur</a> 
    </li> 
</ol> 
<!-- if B not EXIST not show B --> 
<h3>C</h3> 
<ol> 
    <li> 
     <em>tag count</em> 
     <a href="link to tag">Camel</a> 
    </li> 
    <li> 
     <em>tag count</em> 
     <a href="link to tag">Crazy</a> 
    </li> 
</ol> 
<!-- etc --> 

मैं Artefact2 कोड बदलता हूं और y के लिए साझा करता हूं कहां

<?php $previous = null; 
    foreach ($dataProvider as $key => $tag) { 
     $firstLetter = strtoupper(substr($tag['name'], 0, 1)); 
     if($previous !== $firstLetter) { 
      if($key != 0) { 
       echo '</ol>'; 
      }?> 
      <h3 class="alpha"> 
       <span><?php echo $firstLetter;?></span> 
      </h3> 
      <ol class="tags main"> 
     <?php } ?> 
       <li class="tag"> 
        <em><?php echo $tag['TagsCount']; ?></em> 
        <a href="<?php echo $tag['slug']; ?>"> 
         <strong><?php echo ucfirst($tag['name']); ?></strong> 
        </a> 
        <span class="perc" style="width: 90px;"></span> 
       </li> 
     <?php if($key == count($dataProvider)-1) { 
      echo '</ol>'; 
     } 
      $previous = $firstLetter; 
    } 
?> 

बेस्ट सादर www.Forum.iSYSTEMS.am

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