Анализ многострочных данных для строк, чтобы подготовить данные для вставки в несколько запросов PDOPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Анализ многострочных данных для строк, чтобы подготовить данные для вставки в несколько запросов PDO

Сообщение Anonymous »

У меня есть несколько многострочных данных, которые мне нужно проанализировать с помощью PHP, чтобы подготовиться к вставке в таблицу MySQL. Входящие данные беспорядочны, но в них есть некоторый порядок:

Код: Выделить всё

banid 76562577111118516 "Novxre5" "Banned IP (Recent VAC)" -1
banid 76569811108971511 "'Raiding bases'" "no reason" -1
banid 76561198011111435 "Itxxxey" "No Reason Given" -1
banid 76561198011111341 "76561119811340111" "Banned IP (Killing twice and being stupid.)" -1
banid 76561191119523558 "JuicyMexxx" "No Reason Given" -1
banid 76561111117192264 "2'" "Banned IP (Killing and Looting)" -1
banid 76561198271110021 "[ Gixos ] Banzai © ヅヅ" "Banned IP (Killing)" -1
Эти данные могут состоять из сотен строк.
Я хотел бы получить все числовые строки 7656xxxxxxxxxxxxx после банида< /code> из формы и игнорировать все остальное, затем вставить их все в таблицу MySQL с некоторыми другими статическими данными, используя функции PDO - для каждой числовой строки я хотел бы структурировать данные следующим образом:

Код: Выделить всё

$data = [
['sChve4OUb6j3X5EVlriL0QDtMRKYHGIk', 76562577111118516, 'Imported from bans.cfg'],
['sChve4OUb6j3X5EVlriL0QDtMRKYHGIk', 76569811108971511, 'Imported from bans.cfg'],
...
]
Мой PHP-код для вставки данных в базу данных mysql на данный момент выглядит примерно так:

Код: Выделить всё

$bannedPlayers = $data;

$sql = "INSERT INTO bans (serverGroupSecretKey, playerSteamID, reason) ";
$sql .= "VALUES (?, ?, ?);";

$stmt = $pdo->prepare($sql);

$pdo->beginTransaction();

foreach ($bannedPlayers as $player) {
$stmt->execute($player);
}

$pdo->commit();
Как мне проанализировать многострочные данные и построить массив $data? Будет ли то, что я делаю, масштабироваться примерно до 1000 строк данных формы?
preg_match_all
Использование preg_match_all согласно комментарию из @AlexHowansky дает мне такой массив:

Код: Выделить всё

array(2) {
[0]=>
array(7) {
[0]=>
string(24) "banid 76562577111118516 "
[1]=>
string(24) "banid 76569811108971511 "
[2]=>
string(24) "banid 76561198011111435 "
...
}
[1]=>
array(7) {
[0]=>
string(17) "76562577111118516"
[1]=>
string(17) "76569811108971511"
[2]=>
string(17) "76561198011111435"
...
}
}
Выглядит неплохо. Теперь мне просто нужно переработать часть $matches[1] с другими данными, как указано в исходном сообщении.
Должен ли я просто перебирать массив? Или есть более эффективный способ сделать это? Их может быть около 1000...
Тестовый PHP-скрипт
Пока у меня есть это - немного грубо, но, похоже, работает:

Код: Выделить всё

$data = "banid 76562577111118516 \"Novxre5\" \"Banned IP (Recent VAC)\" -1
banid 76569811108971511 \"'Raiding bases'\" \"no reason\" -1
banid 76561198011111435 \"Itxxxey\" \"No Reason Given\" -1
banid 76561198011111341 \"76561119811340111\" \"Banned IP (Killing twice and being stupid.)\" -1
banid 76561191119523558 \"JuicyMexxx\" \"No Reason Given\" -1
banid 76561111117192264 \"2'\" \"Banned IP (Killing and Looting)\" -1
banid 76561198271110021 \"[ Gixos ] Banzai © ヅヅ\" \"Banned IP (Killing)\" -1";

preg_match_all('/^banid (\d+) /m', $data, $matches);

$bannedPlayers = [];

foreach($matches[1] as $player => $data) {

$newBannedPlayer = [$data, "sChve4OUb6j3X5EVlriL0QDtMRKYHGIk", "Imported from bans.cfg"];

array_push($bannedPlayers, $newBannedPlayer);
}

print var_dump($bannedPlayers);
Возвращает массив следующего вида:

Код: Выделить всё

array(7) {
[0]=>
array(3) {
[0]=>
string(17) "76562577111118516"
[1]=>
string(11) "sChve4OUb6j3X5EVlriL0QDtMRKYHGIk"
[2]=>
string(14) "Imported from bans.cfg"
}
[1]=>
array(3) {
[0]=>
string(17) "76569811108971511"
[1]=>
string(11) "sChve4OUb6j3X5EVlriL0QDtMRKYHGIk"
[2]=>
string(14) "Imported from bans.cfg"
}
[2]=>
array(3) {
[0]=>
string(17) "76561198011111435"
[1]=>
string(11) "sChve4OUb6j3X5EVlriL0QDtMRKYHGIk"
[2]=>
string(14) "Imported from bans.cfg"
}
...
}
Если есть вопросы, задавайте, заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/792 ... o-multiple
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»