Получить массив из файла

пакман

Друзья, подскажите как создать массив из такого файла:
501# A potion made from ground Red Herbs that restores ^000088about 45 HP^000000. ^ffffff_^000000 Weight :^777777 7^000000 # 502# A potion made from ground Red and Yellow Herbs that restores ^000088about 105 HP^000000. ^ffffff_^000000 Weight :^777777 10^000000 # 503# A potion made from ground Yellow Herbs that restores ^000088about 175 HP^000000. ^ffffff_^000000 Weight :^777777 13^000000 # 504# A potion made from ground White Herbs that restores ^000088about 325 HP^000000. ^ffffff_^000000 Weight :^777777 15^000000 #
чтобы получить ID => "описание" В файле параметры могут занимать много строк, всегда после ИД идут ##Есть возможно преобразовать параметры в строки, например:
501# A potion made from ground Red Herbs that restores ^000088about 45 HP^000000. ^ffffff_^000000 Weight :^777777 7^000000# 502# A potion made from ground Red and Yellow Herbs that restores ^000088about 105 HP^000000. ^ffffff_^000000 Weight :^777777 10^000000# 503# A potion made from ground Yellow Herbs that restores ^000088about 175 HP^000000. ^ffffff_^000000 Weight :^777777 13^000000#
Но как перевести 7тысяч строк в массив, я всеравно не понимаю. Помогите с решением.
6 ответов

пакман

file() считывает файл в массив explode() разбивает в массив строку по разделителю


пакман

file() считывает файл в массив explode() разбивает в массив строку по разделителю
Спасибо, этого то и не хватало, думаю теперь то точно все получится)Если кому интересно, я сделал вот так
    mysql_connect($server, $db_id, $db_pw) or die("Ошибка соединения: ". mysql_error());
    mysql_select_db($db_name) or die("Невозможно подключится к базе данных.");
    mysql_query("SET NAMES 'utf8'");
 
  $file_array = file("123.txt");
  if(!$file_array)
  {
    echo("Ошибка открытия файла");
  }
  else
  {
    for($i=0; $i < count($file_array); $i++)
    {
      $tex  = "".$file_array[$i]."";
      $pieces = explode("#", $tex);
      
      $item_id = $pieces[0];
      $item_desc = $pieces[1];
      mysql_query ("UPDATE  `база`.`таблица` SET  `столбец` =  '".mysql_real_escape_string($item_desc)."' WHERE  `item_db`.`id` ='".$item_id."'");
      echo "".(int)$item_id." == Готово <br/>";
    }
  }
Правда осталась проблема с экранированием, может кто поможет? Как эффективно провести строку, чтоб не осталось никаких спец символов?


пакман

str_replace()и вот это count($file_array) вынесите в отдельную переменную, что бы функция не вычислялась при каждой иттерации цикла


пакман

Можно подробнее про str_replace(), в тексте много символов, кавычки я экранировал, но этого оказалось мало, какие символы могут помешать? пока листал видел:
" # ; $ & ^ : ? * ( ) - _ + = ! '
и вот это count($file_array) вынесите в отдельную переменную, что бы функция не вычислялась при каждой иттерации цикла
Кстати не суть важно, скрип будет выполняться на локале и всего один раз, для единоразового заменения. Даже защита не нужна, к нему просто не будет доступа.


пакман

удалить не нужные символы можно так
$search = array('#', '$', и т.д); // массив с символами которые нужно удалить
$item_desc = str_replace($search, '', $pieces[1]);// все символы из массива заменяться на пустоту
а про count я говорил, что если у вас например в массиве 1000 строк, то у вас 1000раз будет вычислятся функция count, хотя в реальности ее нужно вычислить один раз
for($i=0, $cnt = count($file_array); $i < $cnt; $i++)


пакман

Спасибо, разобрался)