Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.444
  • Registro em

  • Última visita

4 Seguidores

Sobre Frank K Hosaka

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

Frank K Hosaka's Achievements

0

Reputação

  1. Eu acho bem bacana o roteador do Laravel, e eu pensei fazer o mesmo no PHP. O Copilot sugeriu criar o arquivo .htaccess: RewriteEngine On RewriteRule ^([^/]+)/?$ index.php [L] No teste que eu fiz no Hostinger, não precisei do arquivo .htaccess O meu roteador ficou assim: <?php class Teste { function teste() {echo "olá mundo!";} function beleza($alfa = null) { if($alfa){echo $alfa;} else {echo "o mundo e belo";} } } $request = $_SERVER['REQUEST_URI']; $script_name = $_SERVER['SCRIPT_NAME']; $base = str_replace(basename($script_name), '', $script_name); $path = str_replace($base, '', $request); $path = trim($path, '/'); if(strpos($path,'?')===false){$path .= '?';} list($before,$after)=explode('?',$path,2); $rota=['teste'=>'Teste.teste','beleza'=>'Teste.beleza']; $segmentos=explode('.',$rota[$before]); $nomeControle=$segmentos[0]; $metodo=$segmentos[1]; $parametro=$after ?? null; (new $nomeControle())->$metodo($parametro); ?> Ele funcionou quando escrevi localhost/astudy/teste, localhost/astudy/beleza, localhost/astudy/beleza?variavel=15
  2. Depois de cinco anos, graças ao Copilot, consegui tirar o ícone do calendário do <input type="date"> <?php $hoje=date('Y-m-d'); ?> <style> input[type="date"]::-webkit-calendar-picker-indicator { display: none} input {border: none; width:80px} body {width:630px;margin:0 auto;margin-top:200px} </style> <input type="date" value="<?=$hoje?>" onclick="this.showPicker()">
  3. [copilot.microsoft.com] arquivo diferencial.py import numpy as np import matplotlib.pyplot as plt # Definindo a função f(x, y) def f(x, y): return 1/x**2 - 2*y # Método de Euler para resolver a equação diferencial def euler_method(f, x0, y0, h, x_end): x = np.arange(x0, x_end + h, h) y = np.zeros(x.size) y[0] = y0 for i in range(1, x.size): y[i] = y[i-1] + h * f(x[i-1], y[i-1]) return x, y # Condições iniciais e parâmetros x0 = 1 y0 = -1 h = 0.01 x_end = 2 # Resolvendo a equação diferencial x, y = euler_method(f, x0, y0, h, x_end) # Plotando a solução plt.plot(x, y, label="Solução de y' = 1/x^2 - 2y") plt.xlabel('x') plt.ylabel('y') plt.title("Solução da Equação Diferencial") plt.legend() plt.grid(True) plt.show()
  4. Eu criei um formulário UserForm1 e dentro dele coloquei um combobox ComboBox1, e no código VBA coloquei o seguinte código: Private Sub UserForm_Initialize() ' Define o intervalo de células A1:A3 como fonte de dados para o ComboBox ComboBox1.List = Sheets("Plan1").Range("A1:A3").Value End Sub Private Sub ComboBox1_Change() ' Coloca o valor selecionado na célula B1 da planilha "Plan1" Sheets("Plan1").Range("B1").Value = ComboBox1.Value End Sub Também criei um código para a planilha Plan1: Sub MostrarUserForm() UserForm1.Show End Sub Para testar eu coloquei alfa, beta e gama nas células a1, a2, a3. Pedi para executar a macro MostrarUserForm, e o valor selecionado foi colocado na célula B1.
  5. Não se trata de um laço for, cada linha representa um link, ou uma informação. O problema é que a informação precisa de dois ou três <div>, mas eu não consegui alinhar as <div> onde eu queria, assim apelei para a gambiarra. Muito tempo depois de eu publicar o código, descobri que o CSS Tailwind tem o width em pixels, e assim eu não preciso mais da gambiarra: arquivo outrosView.blade.php @include('menuView') <script>btmenu.innerHTML='Outros';document.title="Outros"</script> <div class="bg-gray-200"><a href=estoqueBaixar>Baixar Estoque</a></div> <div><a href=balanceteTBW>Criar tbw</a></div> <div class="bg-gray-200"><a href=produtoDescontinuar>Descontinuar Produto</a></div> <div><a href=estoqueDiferenca>Diferença no Estoque</a></div> <div class="bg-gray-200"><a href=blingDiferenca>Diferença na Bling</a></div> <div><a href=estoqueEntrada>Entrada de Produtos</a></div> <div class="bg-gray-200"><a href=outrosEtiqueta>Etiquetas</a></div> <div><a href=outrosMegaSena>Mega-Sena</a></div> <div class="bg-gray-200"><a href=diarioMercado>Mercado Pago</a></div> <div><a href=nfInicio>Nota do Fornecedor</a></div> <div class="bg-gray-200"><a href=blingFalta>Nota Faltante</a></div> <div class=flex> <div class=w-[200px]>session('codp')</div> <div>{{$vetor['codp']}}</div> </div> <div class="flex bg-gray-200"> <div class=w-[200px]>session('codprod')</div> <div>{{$vetor['codprod']}}</div> </div> <div class="flex"> <div class=w-[200px]>session('criterio')</div> <div class=truncate>{{$vetor['criterio']}}</div> </div> <div class="flex bg-gray-200"> <div class=w-[200px]>session('criterioPessoa')</div> <div>{{$vetor['criterioPessoa']}}</div> </div> <div class="flex"> <div class=w-[200px]>session('dia')</div> <div>{{dbr($vetor['dia'])}}</div> </div> <div class="flex bg-gray-200"> <div class=w-[200px]>session('end')</div> <div>{{$vetor['end']}}</div> </div> <div class="flex"> <div class=w-[200px]>session('id')</div> <div>{{$vetor['id']}}</div> </div> <div class="flex bg-gray-200"> <div class=w-[200px]>session('lcto')</div> <div>{{$vetor['lcto']}}<td></div> </div> <div class="flex"> <div class=w-[200px]>session('pessoa')</div> <div>{{$vetor['pessoa']}}</div> </div> <div class="flex bg-gray-200"> <div class=w-[200px]>env('lctoBaixaEstoque')</div> <div class=w-[100px]>{{$baixa}}</div> <div class='text-red-600 text-right'>{{dec($valorBaixa)}}</div> </div> <div class="flex"> <div class=w-[200px]>env('lctoAcertoMais')</div> <div class=w-[100px]>{{$mais}}</div> <div class='text-red-600 text-end'>{{dec($valorMais)}}</div> </div> <div class="flex bg-gray-200"> <div class=w-[200px]>env('lctoAcertoMenos')</div> <div class=w-[100px]>{{$menos}}</div> <div class='text-red-600 text-right'>{{dec($valorMenos)}}</div> </div> <div class="flex"> <div class=w-[200px]>env('diaAcerto')</div> <div>{{dbr($diaAcerto)}}</div> </div>
  6. Eu ainda não sei fazer a roda, você tem o tutorial, de preferência em PHP?
  7. Imagine que você vende repolho por peça, mas o seu fornecedor vende num saco de 10 peças. Eu tive um trabalho danado para adaptar o banco de dados ao XML do fornecedor. Imagine que apareceu outro fornecedor que vende por peça e não por saco. E assim foi o meu pesadelo no último ano. Hoje eu tive a brilhante ideia de adaptar o XML ao banco de dados. A ideia é pegar o XML, colocar tudo numa tabela provisória (tbnf), alterar a quantidade na unha, e depois mandar para a tabela definitiva (tbhistprod). Ele ficou assim: arquivo NF.php <?php class NF{ function atualiza(){ $previa=(new Conn)->select("* from tbnf"); extract($_SESSION['vetor']); return view('NFview',['previa'=>$previa,'nNF' => $nNF,'xNome' => $xNome, 'codp' => $codp,'vNF' => $vNF,'difAliqICMS' => $difAliqICMS, 'soma'=>$soma]); } function custo(){ $custoAtual = $_POST['custoAtual']; $codprod = $_POST['codprod']; $previa=(new Conn)->select("marg from tbprod where codprod=$codprod")[0]; $venda=pvenda($custoAtual,$previa->marg); $class="class=text-end"; (new Conn)->update("tbnf set custoanterior=$custoAtual, class='$class' where codprod=$codprod"); return (new Conn)->update("tbprod set custo=$custoAtual, venda=$venda where codprod = $codprod"); } function incluir(){ $lcto=$_POST['lcto']; $verifica=count((new Conn)->select("* from tbhistprod where lcto=$lcto")); if($verifica){ $mensagem="<h1>Nota já lançada. <a href=?NF.atualiza>Voltar</a></h1>"; return view('mensagemView',['mensagem'=>$mensagem]); } $dia=(new Conn)->select("dia from tbdiario where lcto=$lcto")[0]->dia; $matriz=(new Conn)->select("* from tbnf"); foreach($matriz as $vetor){ (new Conn)->insert("tbhistprod (codprod,dia,qt,custototal,codp,lcto) values ($vetor->codprod,'$dia',$vetor->qt,$vetor->custototal,$vetor->codp,$lcto)"); } return header("location:?Diario.inicio.$dia"); } function inicio(){return view('NFarquivo');} function qt(){ $qt=$_POST['qt']; $id=$_POST['id']; $previa=(new Conn)->select("* from tbnf where id=$id")[0]; $novoClass=$previa->class; $custoAtual=intval($previa->custototal/$qt*100)/100; if($custoAtual!==$previa->custoanterior){ $novoClass="class=\"text-danger text-end\""; } (new Conn)->update("tbnf set class='$novoClass', custoatual=$custoAtual, qt=$qt where id=$id"); return $this->atualiza(); } function selecionada(){ (new Conn)->delete("tbnf"); (new Conn)->exec("alter table tbnf auto_increment = 1"); $nfe=simplexml_load_file($_FILES['arquivo']['tmp_name']); $itens=$nfe->NFe->infNFe->det; $difAliqICMS=0; $aliquotaInterna=0.18; foreach ($itens as $item){ if ((string)$item->prod->CFOP == 6102){ $vBC = (string)$item->imposto->ICMS->ICMS10->vBC; $vICMS = (string)$item->imposto->ICMS->ICMS10->vICMS;; $difAliqICMS += intval(($vBC * $aliquotaInterna - $vICMS) * 100) / 100; } } $vNF = (string)$nfe->NFe->infNFe->total->ICMSTot->vNF; $nNF = (string)$nfe->NFe->infNFe->ide->nNF; $xNome = (string)$nfe->NFe->infNFe->emit->xFant; $nome = explode(" ", $xNome)[0]; $codp = (new Conn)->select("codp from tbpessoa where pessoa like '%$nome%'")[0]->codp; $soma=0; foreach ($itens as $item){ // no campo codforn uso a primeira letra para identificar o fornecedor $codforn = (string)$item->prod->cProd; $criterio= $nome[0].$codforn; $consulta = (new Conn)->select("codprod from tbprod where codforn like '%$criterio%' "); $codprod = 'Verificar'; if (count($consulta) == 1){ $codprod = $consulta[0]->codprod; } $produto = (string)$item->prod->xProd; $quantidade = (string)$item->prod->qCom; if (is_numeric($codprod)){ $produtoDobrado = [506, 507, 508, 509, 510, 519, 1768, 1770, 1772]; if (in_array($codprod, $produtoDobrado)){ $quantidade = 2 * $quantidade; } $produtox5=[1798]; if (in_array($codprod,$produtox5 )){ $quantidade = 5 * $quantidade; } $produtoX10 = [2192, 2190,1782,2456]; if (in_array($codprod, $produtoX10)){ $quantidade = 10 * $quantidade; } } $vICMSST = ((string)$item->imposto->ICMS->ICMS10->vICMSST) ? (string)$item->imposto->ICMS->ICMS10->vICMSST : null; $difAliq = 0; if ((string)$item->prod->CFOP == 6102){ $vBC = (string)$item->imposto->ICMS->ICMS10->vBC; $vICMS = $item->imposto->ICMS->ICMS10->vICMS; $difAliq = intval(($vBC * $aliquotaInterna - $vICMS) * 100) / 100; } $vIPI = 0; if ((string)$item->imposto->IPI->vIPI){ $vIPI = (string)$item->imposto->IPI->vIPI; } $vProd = (string)$item->prod->vProd; $valorTotal = $vProd + $vICMSST + $difAliq + $vIPI; $soma += $valorTotal; $class = "class=text-end"; if (is_numeric($codprod)){ $custoAtual = intval($valorTotal / $quantidade * 100) / 100; $consulta = (new Conn)->select("custo from tbprod where codprod=$codprod"); $custoAnterior = $consulta[0]->custo; if (abs($custoAnterior - $custoAtual) > 0.02){ $class = "class=\"text-end text-danger\""; } } (new Conn)->insert("tbnf (codforn,codprod,prod,qt,custoatual,custoanterior,class,custototal,codp) values ($codforn,$codprod,'$produto',$quantidade,$custoAtual,$custoAnterior,'$class',$valorTotal,$codp)"); } $previa=(new Conn)->select("* from tbnf"); $_SESSION['vetor']=['nNF' => $nNF,'xNome' => $xNome, 'codp' => $codp,'vNF' => $vNF,'difAliqICMS' => $difAliqICMS, 'soma'=>$soma]; return view('NFview',['previa'=>$previa,'nNF' => $nNF,'xNome' => $xNome, 'codp' => $codp,'vNF' => $vNF,'difAliqICMS' => $difAliqICMS, 'soma'=>$soma]); } } arquivo NFarquivo.php <?php require 'menuView.php' ?> <script>btmenu.innerHTML="Nota do Fornecedor";document.title="Nota do Fornecedor"</script> <div class=mb-3> <form method=post enctype="multipart/form-data" action="?NF.selecionada"> <label for=arquivo class=form-label>Escolha o arquivo XML</label> <input type=file name=arquivo class=form-control id=formfile required onchange=submit()> </form> </div> arquio NFView.php <?php include('menuView.php'); ?> <script> btmenu.innerHTML='NF Fornecedor';document.title="NF Fornecedor" function atualizar(custoAtual,custoAnterior,codprod){ confirma=confirm("Atualizar?\ncusto atual: "+custoAtual+"\ncusto anterior: "+custoAnterior) if(confirma){ xmlhttp=new XMLHttpRequest() url = "?NF.custo" formData = new FormData() formData.append('custoAtual',custoAtual) formData.append('codprod',codprod) xmlhttp.open("POST",url,true) xmlhttp.send(formData) location.replace('?NF.atualiza') } } </script> <table class='table table-striped table-sm'> <tr class=fw-semibold><td colspan=3>NF <?=$nNF." ".substr($xNome,0,4)." codp ".$codp?><td><td><td class=text-end><?=dec($vNF)?> <?php if($difAliqICMS!==0): ?> <tr class=fw-semibold><td><td><td>Diferença de Alíquota de ICMS<td><td class=text-end><?=dec($difAliqICMS)?> <tr class=fw-semibold><td><td><td>Total a conferir<td><td class=text-end><?=dec($difAliqICMS+$vNF)?> <?php endif; ?> </table> <table class="table table-striped table-sm"> <th style="max-width:50px">Cforn <th style="width:50px"> <th style="width:360px">Produto <th class=text-end>Qt <th class=text-end>Custo <th class=text-end>Total <?php foreach($previa as $p): ?> <tr><td style="max-width:50px" class=text-end><?=$p->codforn?> <td style="max-width:50px" class=text-end><?=$p->codprod?> <td style="max-width:360px" class="overflow-hidden" ><?=$p->prod?> <td> <form method=post action=?NF.qt> <input name=qt value='<?=$p->qt?>' class="inv text-end" size='1' onchange=submit()> <input type=hidden name=id value='<?=$p->id?>'> </form> <td <?=$p->class?> onclick="atualizar(<?=$p->custoatual?>,<?=$p->custoanterior?>,<?=$p->codprod?>)"><?=dec($p->custoatual)?> <td class=text-end><?=dec($p->custototal)?> <?php endforeach; ?> <tr class=fw-semibold><td><td><td>Total dos itens<td><td></td><td class=text-end><?=dec($soma)?> </table> <div> Enviar tudo para o banco de dados <form action=?NF.incluir method=post> <input name=lcto placeholder="Número do Lançamento" required> <input type=submit> </form> </div>
  8. Atualmente eu uso o recurso do PHP chamado DOMDocument para obter as informações que eu preciso de uma nota fiscal eletrônica. Ele funciona, mas o VS Code reclama que estou usando um método que ele desconhece. Para contornar o problema, pedi ajuda para o Copilot e cheguei no simplexml do PHP: <?php // Caminho do arquivo XML $arquivoXML = 'nfeletronica.xml'; // Verifica se o arquivo existe if (file_exists($arquivoXML)) { // Carrega o arquivo XML $xml = simplexml_load_file($arquivoXML); // Acessa o array [det] dentro de infNFe $detArray = $xml->NFe->infNFe->det; // Itera sobre cada elemento do array [det] echo '<table><th>Código<th>Descrição<th>Qt<th>Total'; foreach ($detArray as $det) { echo "<tr><td>".(string)$det->prod->cProd; echo "<td>".(string)$det->prod->xProd; echo "<td>".(string)$det->prod->qCom; echo "<td>".(string)$det->prod->vProd; } echo '</table>'; } else { // Exibe uma mensagem de erro se o arquivo não existir exit('Falha ao abrir o arquivo XML.'); } ?>
  9. Eu tenho esse código <?php session_start(); if (!isset($_SESSION['nome'])) { header("location:./"); exit; } ?> Ele funciona no notebook. Se eu escrevo "localhost/frank/revisao", ele muda para "localhost/frank/". O meu problema é lá na Hostinger. Se eu escrevo, frank.com/revisao, ele permanece do mesmo jeito. Já usei o comando location.replace( ) do JavaScript e outras dezenas de sugestões do Copilot, mas nada deu certo.
  10. <div class="whitespace-nowrap overflow-auto px-2"><?= $lcto->hist ?></div> Ele fica um pouco desalinhado, dá para consertar, diminuindo o tamanho em pixel do campo histórico, mas aí apareceram vários históricos com o recurso da barra deslizante, então, achei melhor do jeito que está. Agora estou trabalhando com um <body class="w-[600px]">, é o que cabe na tela do celular, no modo paisagem.
  11. Frank K Hosaka

    A impressora

    O meu irmão não se deu bem com a impressora térmica para emitir orçamento, ele disse que a impressora só é boa para emitir nota fiscal ao consumidor eletrônica (NFCe). Ele decidiu comprar uma impressora a laser, o HP 107 w. Levei uma hora para configurar a impressora, eu fiz a besteira de conectar o cabo de dados da impressora com o notebook. Hoje tudo é diferente, não é mais necessário o cabo de dados, mas enfim consegui conectar a impressora na rede WiFi. O pesadelo foi na hora de adaptar o código PHP para a nova impressora. Eu e o Copilot gastamos oito horas para fazer o serviço de impressão funcionar. Depois de muita tentativa e erro, pedi para o Copilot começar do zero, tentar imprimir "Olá mundo" pelo Android, e deu certo. Esse foi o núcleo do trabalho, e pouco a pouco fui acrescentando o resto do serviço. O problema foi na hora de usar o comando JavaScript window.onafterprint(), é justamente esse comando é que estava detonando todo o serviço. O Copilot teve a genial ideia de criar o botão "Concluir" para substituir o serviço do afterprint. Outro serviço que não deu certo foi window.scrollTo. Resumindo, não deu para automatizar tudo, o que o JavaScript não conseguiu fazer, eu joguei nas costas do usuário: <?php include('menuView.php'); ?> <style> @media print {.no-print { display: none; }} .print-area {text-align: center;margin: 20px;} </style> <div class="print-area"> <table style="margin-left:420px"> <tr class=fw-semibold><td colspan=7>Quitanda do Frank - Praça Castelo Branco 123 <tr class=fw-semibold><td colspan=7>Pedido <?=$ped?> de <?=dbr($itens[0]->dia)?> <?php foreach($itens as $item): ?> <tr><td colspan=7><?=$item->prod?> <tr><td class=text-end><?=$item->qt?> <td class=text-end><?=$item->un?> <td>x<td class=text-end><?=dec($item->unitario)?> <td>=<td class=text-end><?=dec($item->subtotal)?> <?php endforeach; ?> <tr class=fw-semibold><td>Total<td><td><td><td><td class=text-end><?=dec($itens[0]->total)?> </div> <div class="no-print"> <button onclick="imprimir()">Imprimir</button> <button onclick="concluir()">Concluir</button> </div> <script> document.addEventListener("DOMContentLoaded", function() { // Adiciona a classe no-print ao elemento cabecalho var cabecalho = document.querySelector('#cabecalho'); if (cabecalho) { cabecalho.classList.add('no-print'); } }); function imprimir() { setTimeout(function() { window.print(); }, 500); } function concluir() { location.replace("?Orcamento.inicio.<?=$ped?>"); } </script> </body> </html>
  12. Hoje descobri que um <body> com um width:600px é o ideal para trabalhar com um celular, no modo paisagem, ele é um espaço bem apertado, principalmente se você tiver 9 campos para exibir em cada linha. Então decidi exibir apenas 4 campos e ocultar os demais. Para dispensar o JavaScript para mostrar ou ocultar a <div> usei o marcador <details>, assim: <?php $dados = [['cod'=>1,'desc'=>"maçã"],['cod'=>2,'desc'=>"pera"]]; ?> <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Exemplo de Alternância de Divs</title> <script src="https://cdn.tailwindcss.com"></script> </head> <style> summary {list-style:none} </style> <body class="p-4"> <?php foreach($dados as $dado): ?> <details class="mb-4"> <summary class="cursor-pointer"><?=$dado['cod']?></summary> <div class="p-4 bg-gray-100"> <?=$dado['desc']?> </div> </details> <?php endforeach; ?> </body> </html>
  13. Hoje de manhã, o meu irmão Jorge reclamou que não conseguia ver o total do orçamento no tablet. Eu fui no arquivo appView.php e alterei o código assim: <style> @media (min-width: 768px) { body {width: 750px; margin: auto} } @media (max-width: 767px) { body {width: 600px} } <style> E o meu irmão mostrou que o tablet foi capaz de mostrar o total, eu reduzi o <body> do tablet de 750px para 600px. O nome dessa mágica é o Bootstrap, ele consegue mostrar o que projetei num código para 750px no notebook dentro de um tablet de 600px. Claro que não dá para esperar a mesma mágica no celular. Mas hoje eu lembrei que o celular tem dois modos, o retrato e a paisagem. O modo paisagem tem bem mais que 600px, mas o meu celular mostra exatamente o que eu vejo no modo retrato com as fontes bem ampliadas. Pedi ajuda para o Copilot, pedi para ele me ensinar como fazer o celular não ampliar a fonte, quando mudo o modo retrato para paisagem: <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  14. Encontrei nesse fórum um tema bem interessante, usar o PHP para distribuir tarefas entre pessoas. Eu comecei com João e Maria, e as tarefas eram limpar o chão e limpar o teto. O Copilot entendeu o meu problema, e ele resolveu o meu problema assim: João fica com o chão e a Maria fica com o teto. O código do Copilot é uma bela obra de arte, e ele mostra que o PHP é a melhor forma de começar um projeto. Baseado nesse trabalho, expliquei para o Copilot que o Leonardo e o Danilo não querem trabalhar na entrada e no auditório, e ele resolveu assim: <?php // Array de colaboradores $colaboradores = array('Leonardo', 'Danilo', 'Mateus', 'Lucas', 'Pedro', 'Batista'); // Array de tarefas $tarefas = array('entrada', 'auditorio', 'Fone 1', 'Fone 2', 'leitor', 'som'); // Atribuir tarefas aos colaboradores $atribuicoes = array(); $indicesNaoPermitidos = array(); // Definir um índice inicial $indiceInicial = 0; foreach ($tarefas as $tarefa) { // Verifica se a tarefa é "entrada" ou "auditorio" if ($tarefa == 'entrada' || $tarefa == 'auditorio') { // Encontra um colaborador que não seja Leonardo ou Danilo while (in_array($indiceInicial, $indicesNaoPermitidos) || $colaboradores[$indiceInicial] == 'Leonardo' || $colaboradores[$indiceInicial] == 'Danilo') { $indiceInicial = ($indiceInicial + 1) % count($colaboradores); } } else { // Encontra o próximo colaborador disponível while (in_array($indiceInicial, $indicesNaoPermitidos)) { $indiceInicial = ($indiceInicial + 1) % count($colaboradores); } } // Atribui a tarefa ao colaborador $atribuicoes[$colaboradores[$indiceInicial]] = $tarefa; // Armazena o índice usado para evitar duplicações $indicesNaoPermitidos[] = $indiceInicial; // Move para o próximo colaborador $indiceInicial = ($indiceInicial + 1) % count($colaboradores); } // Exibir as atribuições foreach ($atribuicoes as $colaborador => $tarefa) { echo "$colaborador: $tarefa <br>"; } ?>
  15. Usando o Copilot, cheguei nessa solução, mas para simplificar não considerei o dia em que a tarefa será executada, mas acredito que dá para expandir o código, até atingir o objetivo do seu projeto: <?php // Array de colaboradores $colaboradores = array('Leonardo', 'Danilo', 'Mateus', 'Lucas', 'Pedro', 'Batista'); // Array de tarefas $tarefas = array('entrada', 'auditorio', 'Fone 1', 'Fone 2', 'leitor', 'som'); // Atribuir tarefas aos colaboradores $atribuicoes = array(); $indicesNaoPermitidos = array(); // Definir um índice inicial $indiceInicial = 0; foreach ($tarefas as $tarefa) { // Verifica se a tarefa é "entrada" ou "auditorio" if ($tarefa == 'entrada' || $tarefa == 'auditorio') { // Encontra um colaborador que não seja Leonardo ou Danilo while (in_array($indiceInicial, $indicesNaoPermitidos) || $colaboradores[$indiceInicial] == 'Leonardo' || $colaboradores[$indiceInicial] == 'Danilo') { $indiceInicial = ($indiceInicial + 1) % count($colaboradores); } } else { // Encontra o próximo colaborador disponível while (in_array($indiceInicial, $indicesNaoPermitidos)) { $indiceInicial = ($indiceInicial + 1) % count($colaboradores); } } // Atribui a tarefa ao colaborador $atribuicoes[$colaboradores[$indiceInicial]] = $tarefa; // Armazena o índice usado para evitar duplicações $indicesNaoPermitidos[] = $indiceInicial; // Move para o próximo colaborador $indiceInicial = ($indiceInicial + 1) % count($colaboradores); } // Exibir as atribuições foreach ($atribuicoes as $colaborador => $tarefa) { echo "$colaborador: $tarefa <br>"; } ?>
×
×
  • Criar Novo...