Преобразовать текст в двумерный массив

Тема в разделе "PHP", создана пользователем konishoa, 26 фев 2012.

Модераторы: latteo
  1. konishoa

    konishoa Постоялец

    Регистр.:
    22 сен 2010
    Сообщения:
    126
    Симпатии:
    36
    Есть текст
    HTML:
    син/белый;42;1;Северный склад;0002;
    син/белый;46;1;Северный склад;0002;
    кремовый;42;1;Северный склад;0002;
    кремовый;44;1;Южный склад;0001;
    зел/черный;5,5;1;Северный склад;0002;
    Нужно преобразовать в двумерный массив. Спасибо.
     
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    :eek:по какому принципу? я могу 100500 вариантов придумать и всё будет массивом.
     
  3. konishoa

    konishoa Постоялец

    Регистр.:
    22 сен 2010
    Сообщения:
    126
    Симпатии:
    36
    PHP:
    $a explode("\n"$input);
    foreach (
    $a as $key => $line)
    {
      
    $a[$key] = explode(";"$line);
    };
    function 
    compare($v1$v2)
    {
      if (
    $v1[1] == $v2[1]) return 0;
      return (
    $v1[1] < $v2[1])?-1:1;
    };
     
     
    usort($a'compare');
     
     
    foreach (
    $a as $element)
    {
      
    $output .=$element[1];
    };
      return 
    $output;
    Вроде сделал. Подскажите как избавится от дубликатов? При выводе второго столбца $element[1] есть дублирующие, как их не выводить?
     
  4. andrei_k

    andrei_k

    Регистр.:
    17 янв 2010
    Сообщения:
    251
    Симпатии:
    52
    PHP:
    <?
    $lines file('data.txt'); // файл с данными
    $cols = array ('color''size''count''sklad''number'); // название полей (назвал примерно, как понял сам)
    foreach ($lines as $line_num => $line) {
    $data explode(";"$line);
    foreach(
    $cols as $col_num => $col_name){
    $item[$line_num][$col_name] = $data[$col_num];
    }
    }
    print_r($item);
    ?>
     
    konishoa нравится это.
  5. andrei_k

    andrei_k

    Регистр.:
    17 янв 2010
    Сообщения:
    251
    Симпатии:
    52
    konishoa нравится это.
  6. konishoa

    konishoa Постоялец

    Регистр.:
    22 сен 2010
    Сообщения:
    126
    Симпатии:
    36
    Чуть ниже посмотрел кусок кода. Он подойдёт в моём случае?
    Перевод: мне нужна была функция, которая удаляет дубликаты из массива и игнорирует все остальные, и вот что получилось:
    PHP:
    <?php
    function specified_array_unique($array$value)
    {
        
    $count 0;
     
        foreach(
    $array as $array_key => $array_value)
        {
            if ( (
    $count 0) && ($array_value == $value) )
            {
                unset(
    $array[$array_key]);
            }
     
            if (
    $array_value == $value$count++;
        }
     
        return 
    array_filter($array);
    }
    ?>
    В общем пришёл к коду удаляющему одинаковые элементы при выводе:
    PHP:
    foreach ($a as $element)
    {
      if (
    $output !== $element[1]) $output .= $element[1];
    };
     
  7. andrei_k

    andrei_k

    Регистр.:
    17 янв 2010
    Сообщения:
    251
    Симпатии:
    52
  8. andrei_k

    andrei_k

    Регистр.:
    17 янв 2010
    Сообщения:
    251
    Симпатии:
    52
    Хотя, нет, что-то туплю.
    Код:
    <?
    $lines = file('data.txt'); // файл с данными
    $cols = array ('color', 'size', 'count', 'sklad', 'number'); // название полей (назвал примерно, как понял сам)
     
    $lines = array_unique($lines); // Убираем повторы
    foreach ($lines as $line_num => $line) {
      $data = explode(";", $line);
      foreach($cols as $col_num => $col_name){
        $item[$line_num][$col_name] = $data[$col_num];
      }
    }
    print_r($item);
    ?>
     
  9. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    похоже на csv файл, тогда:
    PHP:
    <?php
    $a 
    = array();
    $handle fopen("data.txt""r");
    while ((
    $data fgetcsv($handle1000";")) !== FALSE) {
        
    //чтоб не было дублирующих строк, создаём уникальный индекс, например вся строка как уникальный индекс
        
    $a[implode($data)] = $data;
    }
    fclose($handle);
     
    echo 
    '<pre>';
    print_r($a);
    echo 
    '</pre>';
     
  10. Anu

    Anu Постоялец

    Регистр.:
    19 окт 2007
    Сообщения:
    137
    Симпатии:
    13
    PHP:
    // получаем данные из файла и формируем в массив
    $text file_get_contents('.text');
    $text explode("\n"$text);
    foreach(
    $text as &$t$t explode(';',$t);
     
    // удаление дубликатов
    function realUnique($array){
        
    $result array_map("unserialize"array_unique(array_map("serialize"$array)));
        foreach (
    $result as $key=>$value) if(is_array($value)) $result[$key] = realUnique($value);
        return 
    $result;
    }
     
    $text realUnique($text);
    В самом начале замените путь к файлу с данными