2011-12-24 3 views
-1

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

(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; 

..etc. Есть сотни данных, я просто дал вам небольшой снимок, потому что вес файла - это хороший MB. Но хорошо, позвольте мне объяснить, чего я хочу достичь:

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), 

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

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

и вот все.

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

+0

У вас есть id = 13, а name = 'μμ + 3'. Что вы на самом деле хотите изменить в запросе. Вы этого даже не объяснили. Кажется, что вы пытаетесь избавиться от пробелов вокруг «μμ + 3». Если это так, есть ОЧЕНЬ ЛЕГКИЙ способ сделать это. –

ответ

1

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

$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 
} 
+0

Рассматривая другие решения, единственной частью этого кода, которую стоит сохранить, является команда 'file()' для чтения файла в массив. – Grexis

+0

Это то, что я хотел! – Cyclone

+0

Я вижу из другого комментария Циклона, что его данные находятся в файле. Cyclone, вы можете захотеть указать такую ​​информацию в своем следующем вопросе. –

1

Это основано на ответ Чарли Somerville, но только готовит объект 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)); 
} 
Смежные вопросы