Мне нужна помощь в улучшении моего текущего кода. У меня огромный массив (около 20 000 объектов внутри него). Массив выглядит следующим образом:PDO - Вставка большого массива в базу данных MySQL
Array
(
[0] => Player Object
(
[name] => Aaron Flash
[level] => 16
[vocation] => Knight
[world] => Amera
[time] => 900000
[online] => 1
)
[1] => Player Object
(
[name] => Abdala da Celulose
[level] => 135
[vocation] => Master Sorcerer
[world] => Amera
[time] => 900000
[online] => 1
)
[2] => Player Object
(
[name] => Ahmudi Segarant
[level] => 87
[vocation] => Elite Knight
[world] => Amera
[time] => 900000
[online] => 1
)
[3] => Player Object
(
[name] => Alaskyano
[level] => 200
[vocation] => Royal Paladin
[world] => Amera
[time] => 900000
[online] => 1
)
[4] => Player Object
(
[name] => Aleechoito
[level] => 22
[vocation] => Knight
[world] => Amera
[time] => 900000
[online] => 1
)
И так далее ... с примерно 20 000 объектов-игроков.
Теперь я хочу вставить их все в базу данных. Я хотел бы найти способ не перебирать всех игроков. Это вызывает множество проблем с производительностью, и это почти убивает мой компьютер. Я хотел бы сделать это в одном запросе сразу.
Но как я могу получить атрибуты объекта Player, такие как «имя», «уровень» и «призвание» каждого отдельного объекта, не зацикливая их?
Это то, что мой код выглядит следующим образом:
// Insert player list to database
$sql = $db->prepare("INSERT INTO players (name, level, vocation, world, month, today, online) VALUES (:name, :level, :vocation, :world, :time, :time, :online) ON DUPLICATE KEY UPDATE level = :level, vocation = :vocation, world = :world, month = month + :time, today = today + :time, online = :online");
foreach ($players as $player) {
$query = $sql->execute([
":name" => $player->name,
":level" => $player->level,
":vocation" => $player->vocation,
":world" => $player->world,
":time" => $player->time,
":online" => $player->online
]);
}
Потому что сейчас на этом Еогеасп на дне, он зацикливается через 20000 объектов игроков в моем массиве, и получать их имена/уровень/призвание/мир и так далее.
Есть ли лучший способ сделать это? Мой способ сделать это не может быть лучшим решением. Я слышу, что мой компьютер работает с перегрузкой, и кажется, что он вот-вот рухнет.
без зацикливания вы ничего не можете сделать здесь. –
Итак, нет быстрого способа захватить имя $ player-> и т. Д., Не пропуская через них? Не могу ли я как-то сказать, что «: name» должно совпадать с «именем» внутри каждого объекта Player? Зацикливание вызывает много проблем с задержкой и производительностью. –
Вы можете получить элементы с помощью синтаксиса '[]', но это вам не очень помогает. –