I stąd, że pisząc skrypt który ma działać w nieznanym środowisku "w dobrym tonie" jest inicjować nowe zmienne, powodów jest kilka:
1. przy włączonym register_globals zmienna niezainicjowana nie zawsze będzie pusta
2. zainicjowanie tablicy pozwala na jednoznaczny kod, $arr2 będzie tablicą niezależnie od tego, czym jest $arr, jak $arr jest innego typu to masz jeden błąd w tej konkretnej funkcji (foreach - invalid parameter) i nie musisz szukać gdzie później używałeś funkcji tablicowych na $arr2
Poza tym opisany problem rozwiązuje funkcja
array_values nie wyważajmy otwartych drzwi