How to skip an entire row only if the field is empty in PHP?

Asked

Viewed 126 times

-1

I am generating an sql script for a csv file. I would like to generate the sql file only where the id field is not empty. if the field is empty it jumps the line and does not generate that line in my sql script.

    <?php
/**
 * Created by PhpStorm.
 */
ini_set('memory_limit', '-1');

include 'utils.php';

// Filename contem o nome do CSV passado por parêmetro na linha de comando
$filename = (count($argv) > 3) ? $argv[3] : '';
// Lê o arquivo e o converte para um array com a lista de dados
$csv = parseCsv($filename);
// Extrai metadados do nome do
$path_parts = pathinfo($filename);

/**
 * Dicionário de colunas.
 * Cada item desse array deve conter a chave igual a coluna do cabeçalho do CSV
 * e no valor o nome da coluna no banco de dados.
 */
$dicionario_colunas = [
    'ID parâmetro' => 'ID',
    'Nome do Parâmetro' => 'NOME_PARAMETRO',
    'ID SKU' => 'ID_TR',
    'Nome do TR/SKU' => 'TR_NOME',
    'Unidade de medida que aparecem ao lado do resultado no laudo' => 'UNIDADE_RESULTADO',
    'Categorias de resultados em texto que podem estar no laudo' => 'CATEGORIA_RESULTADO',
    'Limite inferior de detecção' => 'LIMITE_INFERIOR',
    'Limite superior de detecção' => 'LIMITE_SUPERIOR',

];

$csv = normalizeCsvArrayKeys($csv, $dicionario_colunas);

if (empty($csv)) {//verificando se o seu file.csv está vazio
    die("Arquivo csv vazio\n");
}


$examesEquipamentos = [];
foreach ($csv as $linha) {
  $examesEquipamentosId = trim($linha['ID']) . '-' . trim($linha['ID_TR']);
    if (!array_key_exists($examesEquipamentosId, $examesEquipamentos) ) {
        $examesEquipamentos[$examesEquipamentosId] = [
            'ID' => trim($linha['ID']),
            'NOME_PARAMETRO' => trim($linha['NOME_PARAMETRO']),
            'ID_TR' => trim($linha['ID_TR']),
            'TR_NOME' => trim(mb_strtoupper($linha['TR_NOME'])),
            'UNIDADE_RESULTADO' => trim($linha['UNIDADE_RESULTADO']),
            'CATEGORIA_RESULTADO' => trim($linha['CATEGORIA_RESULTADO']),
            'LIMITE_INFERIOR' => trim($linha['LIMITE_INFERIOR']) ?:0,
            'LIMITE_SUPERIOR' => trim($linha['LIMITE_SUPERIOR']) ?: 0,
        ];
        //Para filtrar os id. se tiver vazio, não retornar isso na lista do script.se for contrário, dai retorna
       $examesEquipamentos[$examesEquipamentosId] = array_filter($examesEquipamentos[$examesEquipamentosId], function ($valor) {
            return trim($valor) !== '';
        });

    }
}

$migrationID = date('YmdHis');
$migrationRef = 'exames_tr_equipamentos';
$migrationName = $path_parts['filename'];
$outputName = $migrationID . '_' . $migrationRef . '_' . $migrationName . '.sql';
$output = fopen(ROOT . '/db_crx/migrations/' . $outputName, "w"); # not readedlines

try {
    echo "\nProcessando os dados\n";

    echo "Iniciando output.\n";

    fwrite($output, "SET search_path = \"rx_ref\";\n");
    fwrite($output, 'BEGIN;' . "\n\n");

    fwrite($output, "UPDATE exames_tr_equipamentos SET obsoleto = NOW();\n");

    if (!empty($examesEquipamentos)) {
        fwrite($output, "\n" . "-- insert / update exames_tr_equipamentos\n");
        foreach ($examesEquipamentos as $examesEqui) {
            $stmt = "INSERT INTO exames_tr_equipamentos (exame_id, tr_equipamento_id, unidade, categoria_resultado, limite_inferior,limite_superior) VALUES (" .
                "'{$examesEqui['ID']}','{$examesEqui['ID_TR']}', '{$examesEqui['UNIDADE_RESULTADO']}','{$examesEqui['CATEGORIA_RESULTADO']}',".
                "'{$examesEqui['LIMITE_INFERIOR']}','{$examesEqui['LIMITE_SUPERIOR']}') ".
                "ON CONFLICT (exame_id, tr_equipamento_id) DO UPDATE SET unidade = '{$examesEqui['UNIDADE_RESULTADO']}',".
                "categoria_resultado = '{$examesEqui['CATEGORIA_RESULTADO']}',limite_inferior = '{$examesEqui['LIMITE_INFERIOR']}', limite_superior = '{$examesEqui['LIMITE_SUPERIOR']}',".
                "obsoleto = null;\n";
            fwrite($output, $stmt);
        }
    }


    fwrite($output, "DELETE FROM exames_tr_equipamentos WHERE obsoleto IS NOT NULL;\n");

    fwrite($output, "\n" .
        "INSERT INTO public.crx_migrations (id, reference, description, filename) VALUES ('$migrationID', '$migrationRef', '$migrationName', '$outputName');\n");

    fwrite($output, "\nCOMMIT;\n");
    echo "Output pronto.\nVerifique o arquivo $outputName na pasta de migrações\n";

}
catch (Exception $e) {
    echo "\n" . "Ocorreu uma exceção durante a geração do script:\n";
    echo $e->getMessage() . "\n";
    echo $e->getTraceAsString() . "\n";

    if (file_exists($output)) {
        unlink($output);
    }
}
  • I think it broke when you published the code, when you made the comment,

  • explain to me, how so broke @ Bulfaitelo??

  • The code , puts it complete, and then or before puts your remark

  • I put it there. The code snippet I tried to put was: //To filter the id. if empty, do not return it in the list of the script.if it is otherwise, dai returns $examsEquipments[$examesEquipments] = array_filter($examsEquipments[$examesEquipments], Function ($value) { Return Trim($value) != '; });

  • These empty id would come from csv ? if yes how would they come ? being a valid value and not being valid value.

  • @Bulfaitelo yes, comes from csv. I simply want to fill my sql without the line that has an empty id

Show 2 more comments

1 answer

1


I added the condition for it to add, the values in the variable $examesEquipamentos when, when the function valuestrlen($linha['ID']); is greater than 0, that is to say that there is some value, it will insert the values in the vector;

<?php
/**
 * Created by PhpStorm.
 */
ini_set('memory_limit', '-1');

include 'utils.php';

// Filename contem o nome do CSV passado por parêmetro na linha de comando
$filename = (count($argv) > 3) ? $argv[3] : '';
// Lê o arquivo e o converte para um array com a lista de dados
$csv = parseCsv($filename);
// Extrai metadados do nome do
$path_parts = pathinfo($filename);

/**
 * Dicionário de colunas.
 * Cada item desse array deve conter a chave igual a coluna do cabeçalho do CSV
 * e no valor o nome da coluna no banco de dados.
 */
$dicionario_colunas = [
    'ID parâmetro' => 'ID',
    'Nome do Parâmetro' => 'NOME_PARAMETRO',
    'ID SKU' => 'ID_TR',
    'Nome do TR/SKU' => 'TR_NOME',
    'Unidade de medida que aparecem ao lado do resultado no laudo' => 'UNIDADE_RESULTADO',
    'Categorias de resultados em texto que podem estar no laudo' => 'CATEGORIA_RESULTADO',
    'Limite inferior de detecção' => 'LIMITE_INFERIOR',
    'Limite superior de detecção' => 'LIMITE_SUPERIOR',

];

$csv = normalizeCsvArrayKeys($csv, $dicionario_colunas);

if (empty($csv)) {//verificando se o seu file.csv está vazio
    die("Arquivo csv vazio\n");
}


$examesEquipamentos = [];
foreach ($csv as $linha) {
  $examesEquipamentosId = trim($linha['ID']) . '-' . trim($linha['ID_TR']);
    if (!array_key_exists($examesEquipamentosId, $examesEquipamentos) ) {
        if(strlen($linha['ID']) > 0){

            $examesEquipamentos[$examesEquipamentosId] = [
                'ID' => trim($linha['ID']),
                'NOME_PARAMETRO' => trim($linha['NOME_PARAMETRO']),
                'ID_TR' => trim($linha['ID_TR']),
                'TR_NOME' => trim(mb_strtoupper($linha['TR_NOME'])),
                'UNIDADE_RESULTADO' => trim($linha['UNIDADE_RESULTADO']),
                'CATEGORIA_RESULTADO' => trim($linha['CATEGORIA_RESULTADO']),
                'LIMITE_INFERIOR' => trim($linha['LIMITE_INFERIOR']) ?:0,
                'LIMITE_SUPERIOR' => trim($linha['LIMITE_SUPERIOR']) ?: 0,
            ];
        }
    }
}

$migrationID = date('YmdHis');
$migrationRef = 'exames_tr_equipamentos';
$migrationName = $path_parts['filename'];
$outputName = $migrationID . '_' . $migrationRef . '_' . $migrationName . '.sql';
$output = fopen(ROOT . '/db_crx/migrations/' . $outputName, "w"); # not readedlines

try {
    echo "\nProcessando os dados\n";

    echo "Iniciando output.\n";

    fwrite($output, "SET search_path = \"rx_ref\";\n");
    fwrite($output, 'BEGIN;' . "\n\n");

    fwrite($output, "UPDATE exames_tr_equipamentos SET obsoleto = NOW();\n");

    if (!empty($examesEquipamentos)) {
        fwrite($output, "\n" . "-- insert / update exames_tr_equipamentos\n");
        foreach ($examesEquipamentos as $examesEqui) {
            $stmt = "INSERT INTO exames_tr_equipamentos (exame_id, tr_equipamento_id, unidade, categoria_resultado, limite_inferior,limite_superior) VALUES (" .
                "'{$examesEqui['ID']}','{$examesEqui['ID_TR']}', '{$examesEqui['UNIDADE_RESULTADO']}','{$examesEqui['CATEGORIA_RESULTADO']}',".
                "'{$examesEqui['LIMITE_INFERIOR']}','{$examesEqui['LIMITE_SUPERIOR']}') ".
                "ON CONFLICT (exame_id, tr_equipamento_id) DO UPDATE SET unidade = '{$examesEqui['UNIDADE_RESULTADO']}',".
                "categoria_resultado = '{$examesEqui['CATEGORIA_RESULTADO']}',limite_inferior = '{$examesEqui['LIMITE_INFERIOR']}', limite_superior = '{$examesEqui['LIMITE_SUPERIOR']}',".
                "obsoleto = null;\n";
            fwrite($output, $stmt);
        }
    }


    fwrite($output, "DELETE FROM exames_tr_equipamentos WHERE obsoleto IS NOT NULL;\n");

    fwrite($output, "\n" .
        "INSERT INTO public.crx_migrations (id, reference, description, filename) VALUES ('$migrationID', '$migrationRef', '$migrationName', '$outputName');\n");

    fwrite($output, "\nCOMMIT;\n");
    echo "Output pronto.\nVerifique o arquivo $outputName na pasta de migrações\n";

}
catch (Exception $e) {
    echo "\n" . "Ocorreu uma exceção durante a geração do script:\n";
    echo $e->getMessage() . "\n";
    echo $e->getTraceAsString() . "\n";

    if (file_exists($output)) {
        unlink($output);
    }
}
  • Dude you earned my respect!! Twice and hit the fly!! Thank you so much for agreeing to help me I was already going crazy here hahahaha

Browser other questions tagged

You are not signed in. Login or sign up in order to post.