Вариант с global хреновый. Как минимум потому что привязывает к имени переменной, и лучше вообще не использовать таких неявных вещей, а всё делать однозначно и прозрачно.
<?php 
$users = [];
$users[] = new_user('Ivan', 'Cornev');
$users[] = new_user('Ruslan', 'Ivanov');
$users[] = new_user('Alexandr', 'Makar');
function new_user($name, $last_name) {
    return ['name' => $name, 'last_name' => $last_name];
}
var_dump($users);
Логичнее использовать для массива имя переменной во множественном числе 
$users, потому что в ней хранится множество пользователей. А для функции добавления пользователя логичнее использовать единственное число 
new_user(), потому что добавляется один пользователь.
Если сильно хочется, то возможен вариант с передачей по ссылке:
<?php 
$users = [];
new_user($users, 'Ivan', 'Cornev');
new_user($users, 'Ruslan', 'Ivanov');
new_user($users, 'Alexandr', 'Makar');
function new_user(&$arr, $name, $last_name) {
    $arr[] = ['name' => $name, 'last_name' => $last_name];
}
var_dump($users);
Намного более выразительной, гибкой и функциональной будет ООП реализация:
<?php
<?php
class UsersCollection
{
    private $users = [];
    
    public function getAll() : array
    {
        return $this->users;
    }
    
    public function add(String $name, String $last_name) : void
    {
        $this->users[] = ['name' => $name, 'last_name' => $last_name];
    }
}
$users = new UsersCollection();
$users->add('Irina', 'Vasilyevna');
$users->add('Alexandr', 'Makar');
$users->add('Ruslan', 'Ivanov');
var_dump($users->getAll());