Почему не добавляется элемент в массив?

Немного не пойму, по логике должны добавляться, может что-то я упустил не то, но вот мой код
$user = [];

new_users('Ivan', 'Cornev');
new_users('Ruslan', 'Ivanov');
new_users('Alexandr', 'Makar');
new_users('Irina', 'Vasilyevna');
new_users('Marat', 'Belov');
new_users('Renat', 'Shayhutdinov');

function new_users($name, $last_name){
    $fullname = ['name' => $name, 'last_name' => $last_name];
    $user[] .= $fullname;
    echo "<pre>";
    var_dump($user);
}


Я ожидаю получить
[
[0] => ['name' => 'Ivan', 'last_name' => 'Cornev'],
[1] => ['name' => 'Ruslan', 'last_name' => 'Ivanov'],
...
]

Но получаю вот это
array(1) {
  [0]=>
  string(5) "Array"
}
array(1) {
  [0]=>
  string(5) "Array"
}
array(1) {
  [0]=>
  string(5) "Array"
}
array(1) {
  [0]=>
  string(5) "Array"
}
array(1) {
  [0]=>
  string(5) "Array"
}
array(1) {
  [0]=>
  string(5) "Array"
}

Как мне быть?
  • Вопрос задан
  • 166 просмотров
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Должно быть как минимум так:
$user[] = $fullname;
Вы сейчас добавляете в массив и одновременно зачем-то конкатенируете, поэтому в массив и попадает не массив с данными, а слово Array.
Ответ написан
Комментировать
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
function new_users($name, $last_name){
    global $user;
    $fullname = ['name' => $name, 'last_name' => $last_name];
    $user[] = $fullname;
    echo "\n";
    var_dump($user);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Yan-s
Вариант с 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());
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы