Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

krinosx

DESAFIO PHP - Quero ver quem resolve (MATRIZ)

Recommended Posts

Ola pessoal, estou com um problema que está consumindo meus neurônios e não estou achando um algoritimo coerente para acertar isso. Vamos ao problema:Tenho uma matriz que relaciona um GRUPO DE PRODUÇÃO e NUMEROS DE PEÇAS produzidas por cada grupo. No entanto existe a possibilidade de mais de um grupo trabalhar junto em cada peça, ou seja, cada peça pode ser produzida por 1,2 ou N grupos simultaneamente. O meu objetivo é montar uma listagem com o seguinte formato:Grupoa A, B, C: - Peça 1 - Peça 2 - Peça 3Grupo A, B - Peça 4 - Peça 5Grupo B, C - Peça 6 - Peça 8Grupo A - Peça 7Grupo B - Peça 10, - Peça 11, - Peça 13Entenderam? ou seja, quero ver as peças que os grupos produziram junto e as que cada grupo produziu sozinho... ta f*** pra conseguir resolver essa parada. A matriz que tenho segue abaixo... será que alguem consegue resolver?Array( [iD_PECAS] => Array ( [0] => 1863 [1] => 1990 [2] => 1996 [3] => 1997 [4] => 1998 [5] => 1999 [6] => 2017 [7] => 2046 [8] => 2109 [9] => 2110 [10] => 2111 [11] => 2123 [12] => 2124 [13] => 2128 [14] => 2130 [15] => 2131 [16] => 2132 [17] => 2132 [18] => 2133 [19] => 2133 [20] => 2134 [21] => 2134 ) [uNIDADE_PRODUCAO] => Array ( [0] => "A" [1] => "A" [2] => "B" [3] => "B" [4] => "B" [5] => "B" [6] => "C" [7] => "A" [8] => "B" [9] => "B" [10] => "B" [11] => "B" [12] => "B" [13] => "B" [14] => "C" [15] => "D" [16] => "E" [17] => "F" [18] => "E" [19] => "F" [20] => "E" [21] => "F" ))Bom se alguem conseguir resolver essa parada me mande um e-mail... krinosx@gmail.com vou ficar muito agradecido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se isto lhe ajuda:

PHP

[*]<?php

[*]

[*]$grupop["A"] = array("1","2","3");

[*]$grupop["B"] = array("4","5","6");

[*]$grupop["C"] = array("7","8","9");

[*]

[*]// Pecas produzidas por ABC

[*]echo "<b>Peças produzidas por ABC<br></b>";

[*]foreach ($grupop["A"] as $peca) {

[*] echo "Peça: ".$peca."<br>";

[*]}

[*]foreach ($grupop["B"] as $peca) {

[*] echo "Peça: ".$peca."<br>";

[*]}

[*]foreach ($grupop["C"] as $peca) {

[*] echo "Peça: ".$peca."<br>";

[*]}

[*]// Pecas produzidas por A

[*]echo "<b>Peças produzidas por A<br></b>";

[*]foreach ($grupop["A"] as $peca) {

[*] echo "Peça: ".$peca."<br>";

[*]}

[*]// Pecas produzidas por B

[*]echo "<b>Peças produzidas por B<br></b>";

[*]foreach ($grupop["B"] as $peca) {

[*] echo "Peça: ".$peca."<br>";

[*]}

[*]// Pecas produzidas por C

[*]echo "<b>Peças produzidas por C<br></b>";

[*]foreach ($grupop["C"] as $peca) {

[*] echo "Peça: ".$peca."<br>";

[*]}

[*]

[*]?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... resolveria o problema.. mas tem uma coisa,a matriz que eu tenho montada vem do banco de dados, e não tem como eu mudar, vem dessa maneira mesmo, e os gurpos não são fixos, podem existir N grupos que produzam N peças com N combinações de grupos diferentes.....entende?os grupos não se resumem a A,B,C e as PEÇAS tambem não se resumem a 1,2,3...teria que ser algo mais dinamico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é um problema que pode ser resolvido por orientação a objetos... eu montei uma coisa básica aqui só pra ter um exemplo, depois você extende o código.

 

<?php

class UnidadeProducao {

   var $id;
   var $pecasProduzidas;

   function UnidadeProducao($idUnidade) {
       $this->id             = $idUnidade;
       $this->pecasProduzidas = array();
   }

   function produzirPeca(&$Peca) {
       $this->pecasProduzidas[] =& $Peca;
       $Peca->produzidaPor[] =& $this;
   }

   // debug
   function pecasProduzidas() {
       echo "<p><strong>Peças produzidas pelo grupo \"" . $this->id . "\":</strong> ";
       for ($i = 0; $i < count($this->pecasProduzidas); $i++) {
           echo $this->pecasProduzidas[$i]->id;
           echo ($i < (count($this->pecasProduzidas) - 1) ? ", " : "");
       }
       echo "</p>";
   }
}


class Peca {
   var $id;
   var $produzidaPor;

   function Peca($idPeca) {
       $this->id = $idPeca;
       $this->produzidaPor = array();
   }

   // debug
   function produzidaPor() {
       echo "<p><strong>Unidades que produzem a peça \"" . $this->id . "\":</strong> ";
       for ($i = 0; $i < count($this->produzidaPor); $i++) {
           echo $this->produzidaPor[$i]->id;
           echo ($i < (count($this->produzidaPor) - 1) ? ", " : "");
       }
       echo "</p>";
   }
}


// cria os objetos de "Peca" e "UnidadeProducao"
$peca = Array();
$peca[0] = new Peca(1863);
$peca[1] = new Peca(1990);
$peca[2] = new Peca(1996);

$Unidade_Producao_A = new UnidadeProducao("A");
$Unidade_Producao_B = new UnidadeProducao("B");
$Unidade_Producao_C = new UnidadeProducao("C");

// define as peças produzidas pelas unidades
$Unidade_Producao_A->produzirPeca($peca[0]);
$Unidade_Producao_A->produzirPeca($peca[1]);
$Unidade_Producao_A->produzirPeca($peca[2]);

$Unidade_Producao_B->produzirPeca($peca[0]);
$Unidade_Producao_B->produzirPeca($peca[1]);

$Unidade_Producao_C->produzirPeca($peca[1]);
$Unidade_Producao_C->produzirPeca($peca[2]);

// debugando
$Unidade_Producao_A->pecasProduzidas();
$Unidade_Producao_B->pecasProduzidas();
$Unidade_Producao_C->pecasProduzidas();
$peca[0]->produzidaPor();
$peca[1]->produzidaPor();
$peca[2]->produzidaPor();

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Huuummm....bicho não sei se entendi direito!!

 

Mais se for o que eu to pensando, você pode criar dois campos na sua tabela que funcionariam como flags...

 

A relação é N pra N, não é isso?

Se for, você tem uma tabela que faz relação entre UNIDADE_PRODUCAO E PECAS certo?!

Dai você acrescenta os dois campos, um dizendo se aquela é uma produção individual ou em conjunto.

Assim pra cada UNIDADE_PRODUCAO você vai ter quais as peças foram produzidas individualmente e quais foi em conjunto.

 

Acho que é isso cara!!! :huh:

 

Abração... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Rafael.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta essa logica aqui.... simples e eu acho que é o que você ta procurando...

 

PHP

[*]

[*]$GrupIdPecas = array(

[*]"A||1,2,3",

[*]"B||2,3,4,6",

[*]"C||5,6"

[*]);

[*]$Pecas = array(

[*]1=>1863,

[*]2=>1990,

[*]3=>1996,

[*]4=>1997,

[*]5=>1998,

[*]6=>2017

[*]);

[*]

[*]for($i=0;$i($GrupIdPecas);$i++){

[*]$g = explode("||",$GrupIdPecas[$i]);

[*] $pe = explode(",",$g[1]);

[*]echo "Grupo " .$g[0]" Peças por esse grupo: ";

[*] for($ff=0;$ff<=count($pe);$ff++){

[*] echo $Pecas[$ff]." ";

[*] }

[*]echo "
"
;

[*]}

[*]

 

 

=)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae gente... valeu pela ajuda.. achei interessante o modelo orientado a objeto...no entanto o CODEMAN mandou uma solução até que simples baseada em matrizes que me serviu como uma luva...Obrigado pelo empenho de todos.. e bom.. vou arquivar todas as soluções pq isso com ctz vai servir mais para frente....Como é em PHP vou ficar com a solução do codeman (inclusive ja apliquei, testei e está em produção aqui... )Mas essa com orientação a objeto pode ser util para eu aplicar em Java caso venha a precisar.. só acho que vou precisar acrescentar umas "Collections" para gerenciar a quantidade "variavel" de grupos e peças.... mas isso eu faço assim que tiver um tempo e posto aqui como ficou....valeu povo!!E valeu ae CODEMAN!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.