Давно ещё я писал про этот глюк. Забыл уже, думал поправили.
Только там в обратную сторону проблема была, в скрипте нужны были числа. При извлечении по индексу получалось число, а arrpop давал строку.
Но причина одна естественно.
Нужно или доработать механизм определения типа по содержимому, что предпочтительней (не только в этом месте проблема).
Или временно сделать всё в массиве как строки... Не, так не надо. Ну его в баню.