@9StarRu

Как правильно построить таблицу при получении данных из csv файла?

Пытаюсь построить таблицу основываяся на полученных из файла csv данных, а именно мне необходимо сделать возможным выбрать название для каждого поля из файла разделенного запятой, например:

поле, поле2, поле3, поле4
поле, поле2, поле3, поле4, поле5
поле, поле2, поле3, поле4, поле5, поле6
поле, поле2, поле3, поле4
поле, поле2, поле3, поле4

После загружки файла с такими полями мне необходимо для каждого из полей назначить названия для того, чтобы далее сохранить данные в базу данных MySQL.

Примерно так это выглядит https://i.gyazo.com/5792f6b8541006ba9ffef06d8025cd...

Получилось отображать select с выбором названия для конкретного поля только в том случае, если данное поле не пустое, иначе выглядеть может так

4a4081fdc6de0eeda1a9443df28ec8d2.png

Стало понятно, что остальные поля тоже важны, вот мой вопрос: как изменить код так, чтобы он отображал select для тех полей, которые пусты в конкретной строке, НО далее в строках файла данные поля не пусты? Т.е., как отобразить select для данного варианта (4 столбец).

4a4081fdc6de0eeda1a9443df28ec8d2.png

Код мой очень приметивный, не сталкивался с подобными задачами, да и вообще далеко не программист...

Спасибо!

Код:

function multiexplode ($delimiters, $string) {
$ready  = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}


<table>
 <tr>';


$i = 0; //начальное значение


while ((($i <= 0) and $text = fgets($fp, 4096)) !== false) {

$i++;

$text = str_replace('"', '', $text);

$exploded = multiexplode (array(",", ";", "|"), $text);

foreach($exploded as $item){

     $item = trim ($item);

if(isset($item) && $item !== '')  {  

     echo '
     <th>
        <select name="select2">
            <option selected="selected">Выберите поле</option>
            <option value="name">Имя</option>
            <option value="phone">Телефон</option>
            <option value="data">Дата рождения</option>
            <option value="create">+ Создать новое поле</option>
        </select>
     </th>';

}

}
print '
</tr>';
    
}



while ((($i <= 4) and $text = fgets($fp, 4096)) !== false) {

$text = str_replace('"', '', $text);

$exploded = multiexplode (array(",", ";", "|"), $text);

        $i++;
        

print '
<tr>';

foreach($exploded as $item){
   
     //$item = str_replace(',', '', $item);

     $item = trim ($item);
     
if(isset($item) && $item !== '')  { 

     print '        <td>' . $item . '</td>
     ';
     
}

}

     print '
</tr>';

    
}


print '
</table>
';
  • Вопрос задан
  • 45 просмотров
Решения вопроса 1
@rPman
В данном случае тебе придется дважды пройтись по строчкам файла, первый раз читать исключительно чтобы получить максимальное количество полей, данные либо читать дважды из файла либо при первом чтении сохранить в памяти и вторым циклом проходить по уже готовым данным.

еще момент, ты по коду старательно парсишь csv самостоятельно да еще и не правильно (строки в ковычках могут содержать переход на новую строку), в php для этого есть хорошая функция fgetcsv, возвращает готовый массив
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы