|
|
|
สมมติมีเลข 1 2 3 5 8 9 11 ต้องการทำให้เป็น 1-3,5,8-9,11 ทำยังไงได้บ้างคะ |
|
|
|
|
|
|
|
ผมคิดว่ามันไม่ถูกต้องครับ ถ้า 8,9 จะเป็น 8-9 เพราะตัวเลขอยู่ติดกันไม่น่าใช้ - คั่นกลาง
$string = "";
$number = array(1 ,2 ,3 ,5 ,8 ,9,10,11,12,13,17,20,22,23,24,29);
$max = count($number);
for($i=0; $i<$max; $i++){
if($i <= $max-1)
if($i>0 && ($number[$i-1]+1 == $number[$i]) && ($number[$i+1] == $number[$i]+1)){
if($string[strlen($string)-1] != '-')
$string .= "-";
}elseif($i == 0 || ($i+1) == $max || $number[$i]+1 == $number[$i+1]){
$string .= $number[$i];
}else{
$string .= $number[$i].",";
}
}
echo implode(',' , $number);
echo "<br />";
echo $string;
Quote:ผลลัพธ์ที่ได้
1,2,3,5,8,9,10,11,12,13,17,20,22,23,24,29
1-3,5,8-13,17,20,22-24,29
|
ประวัติการแก้ไข 2014-02-19 13:52:23
|
|
|
|
Date :
2014-02-19 13:50:48 |
By :
sakuraei |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สุดยอดจริง ๆ ครับ
|
|
|
|
|
Date :
2014-02-19 14:20:05 |
By :
apisitp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทำได้แล้วค่ะ
แอบเอาไอเดียไปแก้ไข ที่ต้องเป็น 8-9 เพราะเค้ากำหนดมันมาอะค่ะ
ขอบคุณค่า
|
|
|
|
|
Date :
2014-02-19 16:36:29 |
By :
pandawow |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าไม่เป็นการรบกวน เอาไปใช้กับงานด้านไหนครับ (อยากรู้ ชอบถาม ขี้สงสัย)
|
|
|
|
|
Date :
2014-02-19 19:49:10 |
By :
apisitp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เราเอาไปทำเป็น label ค่ะ
|
|
|
|
|
Date :
2014-02-20 10:11:19 |
By :
pandawow |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เสร็จแล้วใช่หรือเปล่าครับ
รบกวนขอโค้ดที่แก้ไขมาลงด้วยน่ะครับ
|
|
|
|
|
Date :
2014-02-20 10:21:26 |
By :
sakuraei |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เราลองบ้าง
แต่โค้ดเราเป็นแบบเก็บ result ไปใช้งานต่อได้
Code (PHP)
<?php
$array = array(1, 2, 3, 5, 8, 9, 10, 11, 12, 13, 17, 18, 20, 22, 23, 24, 29);
echo implode(", ", $array);
echo "<br /><br />";
$result = array();
$previous = 0;
foreach ($array as $i) {
if ($previous == 0) {
$list = array();
array_push($list, $i);
$previous = $i;
} else if ($i == $previous + 1) {
array_push($list, $i);
$previous = $i;
} else {
array_push($result, $list);
unset($list);
$list = array();
array_push($list, $i);
$previous = $i;
}
if ($i == max($array)) {
array_push($result, $list);
foreach ($result as $l) {
if (count($l) == 1)
echo min($l);
else
echo min($l) . '-' . max($l);
if (max($l) < max($array))
echo ', ';
}
}
}
?>
|
|
|
|
|
Date :
2014-02-21 08:34:50 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|