Well it performs as advertised, just not the way you want. You can switch to usort/uasort which allows you to provide your own comparison function, in your case a function that returns the natural order of the string minus the leading p?
function cmp($a, $b) {
return strnatcmp ( substr($a,1) , substr($b,1) );
}
which is called as
usort($arr,'cmp');
As pointed out in another question, in php 5.3+ this can be rewritten as
usort($arr,function($a, $b) {
return strnatcmp ( substr($a,1) , substr($b,1) );
});