Задать вопрос
@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>
';
  • Вопрос задан
  • 48 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@rPman
В данном случае тебе придется дважды пройтись по строчкам файла, первый раз читать исключительно чтобы получить максимальное количество полей, данные либо читать дважды из файла либо при первом чтении сохранить в памяти и вторым циклом проходить по уже готовым данным.

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

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

Похожие вопросы
FoodSoul Калининград
от 160 000 до 250 000 ₽
BGStaff Москва
До 300 000 ₽
Greenway Global Новосибирск
от 150 000 до 250 000 ₽