Изменение данных в PHP - PullRequest
       5

Изменение данных в PHP

0 голосов
/ 24 декабря 2011

Как я могу изменить эти данные:

(13, 'µµ+3                    ', 'Miecz +3', 1, 0, 0, 2, 32, 1, 16, '', 100, 0, 14, 4, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 21, -1, -1, -1, -1, -1, -1, 0, 1, 0),
(14, 'µµ+4                    ', 'Miecz +4', 1, 0, 0, 2, 32, 1, 16, '', 100, 0, 15, 5, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 28, -1, -1, -1, -1, -1, -1, 30, 1, 0),
(15, 'µµ+5                    ', 'Miecz +5', 1, 0, 0, 2, 32, 1, 16, '', 100, 0, 16, 6, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 35, -1, -1, -1, -1, -1, -1, 40, 1, 0),
(16, 'µµ+6                    ', 'Miecz +6', 1, 0, 0, 2, 32, 1, 16, '', 100, 0, 17, 7, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 42, -1, -1, -1, -1, -1, -1, 50, 1, 0),
(17, 'µµ+7                    ', 'Miecz +7', 1, 0, 0, 2, 32, 1, 16, '', 100, 0, 18, 8, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 49, -1, -1, -1, -1, -1, -1, 65, 1, 0),
(18, 'µµ+8                    ', 'Miecz +8', 1, 0, 0, 2, 32, 1, 16, '', 100, 0, 19, 9, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 56, -1, -1, -1, -1, -1, -1, 80, 1, 0),
(19, 'µµ+9                    ', 'Miecz +9', 1, 0, 0, 2, 32, 1, 16, '', 2000, 0, 0, 0, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 63, -1, -1, -1, -1, -1, -1, 100, 1, 0),
(20, 'Ŕĺ°Ë+0                  ', 'Dlugi Miecz +0', 1, 0, 0, 2, 32, 1, 16, '', 400, 0, 21, 1, 0, 15, 1, 5, 0, 0, 7, 27, 0, 0, 0, 0, 0, 13, 15, 15, 19, 0, -1, -1, -1, -1, -1, -1, 0, 1, 0),
(21, 'Ŕĺ°Ë+1                  ', 'Dlugi Miecz +1', 1, 0, 0, 2, 32, 1, 16, '', 400, 0, 22, 2, 0, 15, 1, 5, 0, 0, 7, 27, 0, 0, 0, 0, 0, 13, 15, 15, 19, 7, -1, -1, -1, -1, -1, -1, 0, 1, 0),
(22, 'Ŕĺ°Ë+2                  ', 'Dlugi Miecz +2', 1, 0, 0, 2, 32, 1, 16, '', 400, 0, 23, 3, 0, 15, 1, 5, 0, 0, 7, 27, 0, 0, 0, 0, 0, 13, 15, 15, 19, 14, -1, -1, -1, -1, -1, -1, 0, 1, 0),

В запрос, например:

UPDATE `itemproto`
SET `name` = 'µµ+3'
WHERE `id` = 13;

UPDATE `itemproto`
SET `name` = 'µµ+4'
WHERE `id` = 14;

...

UPDATE `itemproto`
SET `name` = 'Ŕĺ°Ë+2'
WHERE `id` = 22;

.. и т. Д.,Существуют сотни данных, я только что дал вам небольшой урез, потому что вес файла - это неплохой МБ.Но хорошо, позвольте мне объяснить, чего я хочу достичь:

Fe.есть такая строка ...

(13, 'µµ+3                    ', 'Miecz +3', 1, 0, 0, 2, 32, 1, 16, '', 100, 0, 14, 4, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 21, -1, -1, -1, -1, -1, -1, 0, 1, 0),

Затем скрипт должен переписать приведенную выше строку в запрос:

UPDATE `itemproto`
SET `name` = 'µµ+3'
WHERE `id` = 13;

Вам просто нужна следующая информация из каждой строки для построениязапрос:

(13, 'µµ+3 ' , и т.д ....

Я думаю, что это можно сделать с помощью preg_replace или preg_match, но я не имею представления о регулярном выражении.

В любом случае, я попытаюсь объяснить еще раз на случай, если вы все еще не поняли:

Я получил сотни таких строк (со случайными именами, числами):

(13, 'µµ+3                    ', 'Miecz +3', 1, 0, 0, 2, 32, 1, 16, '', 100, 0, 14, 4, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 21, -1, -1, -1, -1, -1, -1, 0, 1, 0),

Теперь скрипт должен получить эту информацию: (13, 'µµ+3, и, основываясь на этой информации, должен построить следующий запрос:

UPDATE `itemproto`
SET `name` = 'µµ+3'
WHERE `id` = 13;

И это все.

Я знаю егонемного сложнее, но, как вы знаете, все можно сделать с помощью PHP.Вот почему я использую его, но если вы все еще не поняли вопрос, не стесняйтесь оставлять комментарии , и я отвечу!

Ответы [ 2 ]

1 голос
/ 24 декабря 2011

Это основано на ответе Чарли Сомервилля, но только один раз готовит объект PDOStatement.В результате это будет значительно быстрее.

$prepped = $pdo -> prepare ("UPDATE some_table SET name = ? WHERE id = ?");
foreach ($rows as $row) {
    // I'm guessing the first element of each row is the id, and the second is the name
    list ($id, $name) = $row;
    // There should be some error checking here, but for the sake of simplicity I've left it out.
    $prepped -> execute (array ($id, $name));
}
1 голос
/ 24 декабря 2011

Несколько упрощенное решение:

$data = file("path/to/file.txt"); // returns an array of the lines
foreach($data as $key => $val){
    $temp = explode(',', $val);
    $id = trim(substr($temp[0], 1));
    $name = trim($temp[1]);
    $query = "UPDATE `itemproto`
        SET `name` = '$name'
        WHERE `id` = $id;";
    // Do work here
}
...