Код: Выделить всё
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'],
...
]
Код: Выделить всё
$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();
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"
...
}
}
Должен ли я просто перебирать массив? Или есть более эффективный способ сделать это? Их может быть около 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