Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] PHP Fatal error: Uncaught TypeError

Olá, espero que estejam bem!

Estou tendo um erro na linha 13. O codigo é o seguinte:

<?php
$meusCursos = file('cursos.txt');//transformando cad linha num array
$outrosCursos = file('novosCursos.txt');//transformando cad linha num array
$arquivo = fopen('cursos.csv', 'w');//criando um arquivo e definindo modo escrita

foreach ($meusCursos as $meuCurso) {
    $linha = [trim($meuCurso), 'Sim'];//trim para remover a quebra de linha
    //fwrite($arquivo, implode(',', $linha));
    fputcsv($arquivo, $linha, ';');//criando já no modo csv
}
foreach ($outrosCursos as $outroCurso) {
    $linha = [trim($outroCurso), 'Não'];//trim para remover a quebra de linha
    fputcsv($arquivo, $outroCurso, ';');
}
fclose($arquivo);

A mensagem consiste no seguinte: PHP Fatal error: Uncaught TypeError: fputcsv(): Argument #2 ($fields) must be of type array, string given in C:\Users\devsf\OneDrive\Área de Trabalho\ESTUDOS\BACKEND\IO_PHP\arquivo-para-csv.php:13 Stack trace: #0 C:\Users\devsf\OneDrive\Área de Trabalho\ESTUDOS\BACKEND\IO_PHP\arquivo-para-csv.php(13): fputcsv() #1 {main} thrown in C:\Users\devsf\OneDrive\Área de Trabalho\ESTUDOS\BACKEND\IO_PHP\arquivo-para-csv.php on line 13

Ele está criando o arquivo, mas esta escrevendo até o primeiro foreach, o segundo, para colocar negativo aos cursos que o Vinicius não ministrou, não estão sendo registrados.

1 resposta
solução!

Olá, Mayara!

O erro que você está recebendo indica que a função fputcsv() está esperando um array como segundo argumento, mas está recebendo uma string.

No segundo loop foreach, você está passando a variável $outroCurso diretamente para a função fputcsv(), mas essa variável é uma string, não um array. No primeiro loop foreach, você criou um array chamado $linha com o curso e a string 'Sim', e passou esse array para a função fputcsv(). Você precisa fazer algo semelhante no segundo loop foreach.

Aqui está o código corrigido:

<?php
$meusCursos = file('cursos.txt');
$outrosCursos = file('novosCursos.txt');
$arquivo = fopen('cursos.csv', 'w');

foreach ($meusCursos as $meuCurso) {
    $linha = [trim($meuCurso), 'Sim'];
    fputcsv($arquivo, $linha, ';');
}
foreach ($outrosCursos as $outroCurso) {
    $linha = [trim($outroCurso), 'Não'];
    fputcsv($arquivo, $linha, ';');
}
fclose($arquivo);

Nesse código, eu criei um array $linha no segundo loop foreach que contém o curso e a string 'Não', e passei esse array para a função fputcsv().

Espero ter ajudado e bons estudos!