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

konishoa

Профессор
Регистрация
22 Сен 2010
Сообщения
125
Реакции
36
Есть текст
HTML:
син/белый;42;1;Северный склад;0002;
син/белый;46;1;Северный склад;0002;
кремовый;42;1;Северный склад;0002;
кремовый;44;1;Южный склад;0001;
зел/черный;5,5;1;Северный склад;0002;
Нужно преобразовать в двумерный массив. Спасибо.
 
:eek:по какому принципу? я могу 100500 вариантов придумать и всё будет массивом.
 
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] есть дублирующие, как их не выводить?
 
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);
?>
 
Замечание: Обратите внимание, что array_unique() не предназначена для работы с многомерными массивами.
Чуть ниже посмотрел кусок кода. Он подойдёт в моём случае?
I required a function that removed a specific duplicate entry from an array and ignoring all others so came up with this:
Перевод: мне нужна была функция, которая удаляет дубликаты из массива и игнорирует все остальные, и вот что получилось:
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];
};
 
Нужно допилить под себя.

Проще с файлом поработать до его преобразования в массив.

Для просмотра ссылки Войди или Зарегистрируйся
 
Хотя, нет, что-то туплю.
Код:
<?
$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);
?>
 
похоже на csv файл, тогда:
PHP:
<?php
$a = array();
$handle = fopen("data.txt", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
    //чтоб не было дублирующих строк, создаём уникальный индекс, например вся строка как уникальный индекс
    $a[implode($data)] = $data;
}
fclose($handle);
 
echo '<pre>';
print_r($a);
echo '</pre>';
 
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);

В самом начале замените путь к файлу с данными
 
Назад
Сверху