2012-02-25 11 views
5

क्या संख्या 1 - 15. में होने वाली संख्याओं की एक सूची लेने का एक आसान तरीका है और लगातार संख्याओं के स्थान पर एक डैश डालें।लगातार संख्याओं के बीच हाइफ़न के साथ संख्याओं की सूची को कम करना

ताकि उदाहरण के लिए आप निम्न नंबरों था:

1 2 3 5 6 7 10 12

यह होगा उत्पादन

1 - 3, 5 - 7, 10, 12

+2

तुम क्या करने की कोशिश की है? यदि आप एक विशिष्ट प्रश्न पोस्ट करते हैं तो आप पाएंगे कि आपको सर्वोत्तम प्रतिक्रिया मिलती है (यानी आपने जो कोड किया है और यह कैसे काम नहीं कर रहा है)। – liquorvicar

उत्तर

7
<?php 
$n = array (1, 2, 3, 5, 6, 7, 10, 12); 
sort ($n); // If necessary. 
$i = 0; 
while ($i < count ($n)) 
    { 
    if ($i != 0) 
     print (", "); 
    $rangestart = $i; 
    print ($n [$i++]); 
    while ($i < count ($n) && $n [$i] == $n [$i - 1] + 1) 
     $i++; 
    if ($i > $rangestart + 1) 
     print (" - " . $n [$i - 1]); 
    } 
+0

बहुत बहुत धन्यवाद, एक आकर्षण काम किया! – user1096685

5
$n = array (1, 2, 4, 5, 7, 8, 10, 11, 12, 13, 14, 16, 17); 
$lastindex = count($n)-1; 
foreach($n as $k => $i) 
{ 
    if($k == 0) echo $i; 
    elseif($i != $n[$k-1]+1) echo ', ' . $i; 
    elseif($k == $lastindex || $i+1 != $n[$k+1]) echo ' - ' . $i; 
} 

विस्फोट के साथ समारोह:

http://codepad.org/DKztLGhe

function shorten($numbers){ 
    $a = explode(' ',$numbers); 
    $lastindex = count($a)-1; 
    $s = ''; 
    foreach($a as $i => $n){ 
    if($i == 0)         $s .=  $n; 
    else if($a[$i-1]+1 != $n)      $s .= ', '.$n; 
    else if($i == $lastindex || $n+1 != $a[$i+1]) $s .= ' - '.$n; 
    } 
    return $s; 
} 

print_r(shorten('').'<br>'); 
print_r(shorten('1').'<br>'); 
print_r(shorten('1 2').'<br>'); 
print_r(shorten('1 3').'<br>'); 
print_r(shorten('1 3 4 6').'<br>'); 
print_r(shorten('1 3 4 6 7').'<br>'); 
print_r(shorten('1 2 3 4 5').'<br>'); 
print_r(shorten('1 2 3 5 6 10 12 13').'<br>'); 
+0

+1 स्वीकृत से बेहतर है। –

+0

हाय, '$ lastindex' निश्चित रूप से जरूरी है, http://codepad.org/4fvWpL6d कृपया इसे वापस रखें :) – biziclop

+0

'आंतरिक सर्वर त्रुटि'। लिंक नहीं देख सकता, हालांकि मैंने इसे स्थानीय रूप से परीक्षण किया है और यह काम करता है। आखिरी वस्तु पर यह सही होगा ($ n + 1! = $ A [$ i + 1]) '। अगला आइटम '$ a [$ i + 1]' –

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