Как разделить php-массив на несколько частей, чтобы вставить их в имена столбцов csv?

#php #excel #csv

#php #excel #csv

Вопрос:

Я написал код, который позволяет мне читать файл Excel, преобразовывать его в csv и вносить в него изменения. Я добавляю в конец этого файла 10 столбцов, проблема в том, что имена столбцов добавляются сразу с помощью «PICT1; PICT2; PICT3; PICT4; …» только в одном столбце в конце 10. Я бы хотел, чтобы каждый столбец назывался PICT1, PICT2, PICT3… Как мне это сделать?

В настоящее время у меня есть это: введите описание изображения здесь

Я бы хотел, чтобы:

введите описание изображения здесь

 <?php
    


    function multiSplit($string)
        {
            $output = array();
            $cols = explode(",", $string);

        foreach ($cols as $col)
        {
            $dashcols = explode("-", $col);
            $output[] = $dashcols[0];
        }
        
        return $output;
      }


//Modifications on csv file
$delimiter = $delimiterpost;
$csv_data = array();
$row = 1;
if (($handle = fopen($nomcsv, 'r')) !== FALSE) {
    while (($data = fgetcsv($handle, 10000, $delimiter)) !== FALSE) {
        
        //Add columns at the end
        $data['Pictures Names'] = (!empty($data[4]) ? ($data[7] ?: '') . "_" . $data[4] . '.jpg' : ''); 
        $data['Color-Description'] = (!empty($data[3]) ? (ltrim($data[4], '0') ?: '') . "-" . $data[3] : '');  
            
        $out = multiSplit($data[23]);
        
        $data['PICT1'] = $out[0];
        $data['PICT2'] = $out[1];   
        $data['PICT3'] = $out[2];  
        $data['PICT4'] = $out[3];  
        $data['PICT5'] = $out[4]; 
        $data['PICT6'] = $out[5]; 
        $data['PICT7'] = $out[6];  
        $data['PICT8'] = $out[7];
        $data['PICT9'] = $out[8]; 
        $data['PICT10'] = $out[9];
                
        // Delete three columns
        unset($data[1]);
        unset($data[2]);
    unset($data[3]);

        //Modifications on the fourth line
        if ($row == 4) 
        {
               //All uppercase
               $data = array_map('strtoupper', $data);  
               $data = str_replace(' *', '', $data);
               $data = str_replace('/', '', $data);
               //Replacement of spaces by an underscore
               $data = str_replace(' ', '_', $data);
               $data = str_replace('__', '_', $data);
               //Replacement name by another name
               $data = str_replace('STYLE_COLOR.JPG', 'PICT', $data);
               $data = str_replace('COLOR-DESCRIPTION', 'COLOR_DESCRIPTION', $data);
               
                array_filter($data, function($value) { return !is_null($value) amp;amp; $value !== ''; });

                for ( $i=1; $i<=10; $i   ){
                    $data[] = "PICT$i";
                }                                          
        }   
        

         if ($data[22])          
        {
            $data = str_replace(',', '§- ', $data);
                    
        }

            $csv_data[] = $data; 
                              
        $row  ;      
    }
    fclose($handle);
}

$csv_data = array_slice($csv_data, 3); // this will remove first three elements
array_pop($csv_data);// this will remove last element from array


if (($handle = fopen($nomcsv, 'w')) !== FALSE) {    
    foreach ($csv_data as $data) {
        fputcsv($handle, $data, $delimiter);
    }
    fclose($handle);
}
 

Ответ №1:

Заменить

 $data[] ='PICT1'.$delimiter.'PICT2'.$delimiter.'PICT3'.$delimiter.'PICT4'.$delimiter.'PICT5'.$delimiter.'PICT6'.$delimiter.'PICT7'.$delimiter.'PICT8'.$delimiter.'PICT9'.$delimiter.'PICT10';
 

С помощью цикла, который создает дополнительные элементы массива

 // clean out any empty titles as there appear to be some at the end of the array
array_filter($data, function($value) { return !is_null($value) amp;amp; $value !== ''; });

for ( $i=1; $i<=10; $i   ){
    $data[] = "PICT$i";
}
 

Комментарии:

1. Спасибо за ваш ответ, это работает, но столбцы всегда находятся в конце после 10, а не после COLOR_DESCRIPTION

2. О, ваши данные меня немного смущают, и поскольку вы используете старую, ныне несуществующую версию PHPExcel, я не могу ее протестировать. Может быть, вам просто нужно переместить его, чтобы он разместил метки столбцов в нужном месте

3. Я должен был бы поместить его на место всех $data[‘PICT1’] = $out [0]?

4. Конечно, это добавление заголовков столбцов, которые получают только один раз

5. Добавлен некоторый код для удаления пустых вхождений из вашего массива, улучшает ли это результат или вызывает другие проблемы?