2017-05-12 2 views
-1

ダッシュまたはカンマが使用されている一連の数字を入力する必要があります。 私は任意の助けが理解されるであろうダッシュまたはコンマで区切られた一連の数字を入力してください

$str = str_replace(' ', '', '11-17,19,041244-041250); 
$arr = explode(',', $str); 

foreach ($arr as $elem) { 
    $values = explode('-',$elem); 

    if (count($values) != 1) { 
     for($i = $values[0]; $i <= $values[1]; $i++) { 
      $newArr[]=$i; 
     } 
    } else { 
     $newArr[] = $elem; 
    } 

    print_r($newArr); 
} 

正常に動作しますが、数字がゼロで始まる場合、それは(先行ゼロドロップを)働いていない、このコードを使用してい

答えて

0

これを試してみてください。ここから撮影:Incrementing numbers starting from 0000 in php

<?php 
$str = str_replace(' ', '', '11-17,19,041244-041250'); 
$arr = explode(',', $str); 

foreach ($arr as $elem) { 
    $values = explode('-',$elem); 

    if (count($values) != 1) { 
     for($i = $values[0]; $i <= $values[1]; $i++) { 
      //$newArr[]=$values[0]++; 
      $newArr[] = str_pad($i + 1, strlen($values[0]), 0, STR_PAD_LEFT); 
     } 
    } else { 
     $newArr[] = $elem; 
    } 

    print_r($newArr); 
} 
+0

感謝。それが始まり、番号+ 1で終わるのでちょっと変わります。 –

0

このライン:

for($i=$values[0];$i<=$values[1];$i++) $newArr[]=$i; 

これが起こった理由です。あなたが間違っているのは、初期ループ値を文字列として与えることです。あなたは整数にキャストすることができますし、あなたの問題を解決するはずです。

すなわち:

for($i=(int)$values[0];$i<=(int)$values[1];$i++) $newArr[]=$i; 

あなたが考える可能性が別のアプローチは、次のようになります。

$newArr = array_merge($newArr, range((int)$values[0],(int)$values[1])); 

直前にそのメソッドを使用して$newArr = [];を開始することを確認してください。

を調べてください:http://php.net/manual/en/function.range.php

0
<?php 
$str = str_replace(' ', '', '11-17,19,041244-041250'); 
$arr = explode(',', $str); 

foreach ($arr as $elem) { 
    $values = explode('-',$elem); 
    if (count($values) != 1) { 
     $newArr[] = $values[0]; 
     for($i = $values[0]; $i < $values[1]; $i++) { 
      $newArr[] = str_pad($i + 1, strlen($values[0]), 0, STR_PAD_LEFT); 
     } 
    }else{ 
     $newArr[] = $elem; 
    }  
} 
    print_r($newArr); 
} 
関連する問題