Цикл for, как уже сказали - стандартный цикл. foreach же представляет из себя самописанную систему, которая содержит в себе массив и ряд циклов, срабатывающих при подключении/выходе игрока на сервер.
Представим, что на сервере такая картина:
нулевой и первый слот - заняты, второй и третий - свободны, четвёртый - занят, пятый - свободен, шестой - занят.
Стандартный цикл в любом случае начнёт свою проверку с нулевой ячейки и закончит 999-ой (в MAX_PLAYERS в 0.3.7 хранится число 1000). Хоть даже и на сервере всего 4 игрока. В SA-MP 0.3.7 так же добавили функцию, которая возвращает последний занятый ID на сервере, но тогда цикл, опять же, сделает 7 итераций (с 0 по 6), а не 4.
А foreach же реализована система, которая запишет ID игроков по порядку в один массив и выглядеть массив "изнутри" будет так:
PHP код:
0 ячейка - ID 0
1 ячейка - ID 1
2 ячейка - ID 4
3 ячейка - ID 6
И уже цикл, для которого, для удобства, придуман макрос "foreach", будет обращаться не к ID игрока, а к ячейкам массива и извлекать ID игрока из ячеек массива, прогоняя тем самым только те ID, что подключены к серверу.
Если на сервер подключится новый игрок, в foreach, благодаря ряду условий внутри цикла в OnPlayerConnect, новый ID (в нашем случае первый свободный ID - 2) запишется не в конец цикла (после 6), а именно на своё законное место - после двух, "сдвинув" все остальные ID на ячейку. Так же и при отключении - ячейка не станет свободной, а foreach просто возьмёт и сдвинет все последующее ID, шедшие после отключившегося от сервера, на одну ячейку назад. Благодаря этим новым действиям, которые совершаются с подключённым игроком, foreach и работает быстрее (если не понял, то foreach прогоняет в себе лишь те ID, которые подключены к серверу и никакие другие. Поэтому и проверка на то, подключён ли ID, вызываемый циклом (IsPlayerConnected) просто не нужна - он точно подключён).
Так же в foreach имеется возможность создавать свои итераторы. Но это уже отдельная большая темаю
"i" - Это обычная переменная, которая нужна циклу для того, чтоб подсчитывать число повторений (итераций), совершённых при работе с циклом. Ты можешь обозвать эту переменную как угодно, просто в программировании принято переменные цикла обзывать именно таким, сокращённым видом (дабы ты понимал, "i" исходит от "iterator").
"i++" - это обычное математическое действие, которое идентично записи "i = i+1" или же "i += 1". То есть, тут ты просто прибавляешь к переменной единицу. Можешь просто загуглить