Данный код выполнится последовательно, задержка между выполнением каждой из строчек будет составлять милисекунды. Но, если первая команда, например, выполняется достаточно долго, то при запуске второй она еще будет выполняться :) То есть выполнение самих команд асинхронно.
Всё дело в этой строке: $result = json_encode($result);
Когда цикл for идет на второй круг - $result уже не является массивом, и поэтому нельзя к нему вот так обращаться: $result[$i][$key]['names']