-1

Ive got this script to narrow down which page number a release ID is it seems to work for the most part but when i enter 0013 as the number it should say its pageNum=311 but it always comes back with 261.

Have i done something wrong?

Here is the script:

$releaseNumber = sprintf('%04d', 0013);

if($releaseNumber < 6300 && $releaseNumber > 6000) {
    $pageNum = 1;
}elseif($releaseNumber < 6001 && $releaseNumber > 5800) {
    $pageNum = 16;
}elseif($releaseNumber < 5801 && $releaseNumber > 5600) {
    $pageNum = 26;
}elseif($releaseNumber < 5601 && $releaseNumber > 5200) {
    $pageNum = 36;
}elseif($releaseNumber < 5201 && $releaseNumber > 5000) {
    $pageNum = 56;
}elseif($releaseNumber < 5001 && $releaseNumber > 4700) {
    $pageNum = 66;
}elseif($releaseNumber < 4701 && $releaseNumber > 4300) {
    $pageNum = 81;
}elseif($releaseNumber < 4301 && $releaseNumber > 3900) {
    $pageNum = 101;
}elseif($releaseNumber < 3901 && $releaseNumber > 3500) {
    $pageNum = 121;
}elseif($releaseNumber < 3501 && $releaseNumber > 3100) {
    $pageNum = 141;
}elseif($releaseNumber < 3101 && $releaseNumber > 2700) {
    $pageNum = 161;
}elseif($releaseNumber < 2701 && $releaseNumber > 2300) {
    $pageNum = 181;
}elseif($releaseNumber < 2301 && $releaseNumber > 1900) {
    $pageNum = 201;
}elseif($releaseNumber < 1901 && $releaseNumber > 1500) {
    $pageNum = 221;
}elseif($releaseNumber < 1501 && $releaseNumber > 1100) {
    $pageNum = 241;
}elseif($releaseNumber < 1101 && $releaseNumber > 0900) {
    $pageNum = 261;
}elseif($releaseNumber < 0901 && $releaseNumber > 0700) {
    $pageNum = 271;
}elseif($releaseNumber < 0701 && $releaseNumber > 0500) {
    $pageNum = 281;
}elseif($releaseNumber < 0501 && $releaseNumber > 0301) {
    $pageNum = 291;
}elseif($releaseNumber < 0301 && $releaseNumber > 0100) {
    $pageNum = 301;
}elseif($releaseNumber < 0101 && $releaseNumber > 0000) {
    $pageNum = 311;
}
Exoon
  • 1,513
  • 4
  • 20
  • 35
  • 3
    Integers don't use prefixed zeros and if you try to use prefixed zeros then it converts it to an octal value. `$releaseNumber < 101 && $releaseNumber > 0` or `$releaseNumber < '0101' && $releaseNumber > '0000'` – MonkeyZeus Jan 07 '14 at 19:19
  • Also, just for sake of helping your code look better/be easier to read, you don't need to check if `$releaseNumber < number` in your elseif statements because if `$releaseNumber were > number` it would have fallen into the if/elseif statement above. – elitechief21 Jan 07 '14 at 19:24
  • @Almado My script works just didn't know about Octal, Not sure how i need to debug that? and i only code for myself so why do i need to learn arrays or switch-case, If it works im happy. – Exoon Jan 07 '14 at 19:24
  • *" Not sure how i need to debug that?"* - Well by checking what your program does and if that number is the number you expect. So you take your finding of dissent between your expectation and what the code actually does and you use debugging to find out why the expectation differs with the code (and where for the first time). – hakre Jan 07 '14 at 19:27
  • i already know what it does, It was stopping early because i didn't know that by having leading zeros it turned it into a different number, would debugging tell me that? – Exoon Jan 07 '14 at 19:30
  • Well normally it does because for debugging you introduce variables and you output them. Like [`$number = 0013; var_dump($number);`](http://3v4l.org/N65KQ). Or more comfortable with a step-debugger, e.g. Xdebug. – hakre Jan 07 '14 at 19:32
  • ok fair enough, Will check it out, thanks. – Exoon Jan 07 '14 at 19:32

2 Answers2

1

A number starting with a 0 is interpreted as a base 8 number, or octal notation.

See octal notations:

To use octal notation, precede the number with a 0 (zero). To use hexadecimal notation precede the number with 0x.

user2864740
  • 60,010
  • 15
  • 145
  • 220
Fabien Warniez
  • 2,731
  • 1
  • 21
  • 30
1

PHP reads number as octal number (not Ocelet!) when you put 0 in front. 0013 would become 11 so it definitely would be at page 261

Moe Tsao
  • 1,054
  • 6
  • 9