Your problem is using sh -c "...", see @Gilles's answer@Gilles's answer for more details.
Further more, sh (refer to POSIX sh) does not support array (strictly speaking, it has only one array, $@), you need to call other shells on your system, which support array like bash, zsh or ksh.
bash -c 'arr=(1 2 3 4 5);for var in "${arr[@]}";do echo "$var"; done'
Also note that you have a mistake when leaving ${arr[@]} un-quote, actually you need for var in "${arr[@]}" instead. Invoking variable without quotes calling split+glob and is source of many security implicationInvoking variable without quotes calling split+glob and is source of many security implication.
To play with POSIX sh, you can use $@$@:
set -- 1 2 3 4 5
for var do
printf '%s\n' "$var"
done