Лол, ну ахуенно получилось, оказывается пхп спиздил сигнатурску с Си printf("") для метода sprintf(""), но возможность писать %i не добавил
Сложно сказать что спиздил, обычная имплементация как для более высокоуровневой среды.
И да, %i и %d в C имеют разное поведение. Странно, что вы тыкались сначала в одно, а позже решили в другое :)