Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, preciso de um grande help...
Tenho uma string em uma coluna do banco mysql que é a seguinte
0.1752, 0.0245, 0.0247, 0.0247, 0.0247, 0.0221, 0.0147, 0.0347, 0.0217, 0.0547, 0.0247, 0.0847, 0.0247, 0.0747, 0.0947, 0.0147
São 16 números, separados por virgula, eu preciso fazer uma consulta no banco de dados e converter essa string em uma matriz 4x4 com php, será que tem como?
>
Para fazer de modo mais simples explode deveria ter um delimitador diferente a cada 4 tipo um "|" dai dava um explode e explode em cada membro do array.
Nesse caso vai ter que ser mais manual.
$newArray = explode(",", $string)
// aqui você tem o array com os 16 numero
$array[0] = array($newArray[0],$newArray[1],$newArray[2],$newArray[3]);
$array[1] = array($newArray[4],$newArray[5],$newArray[6],$newArray[7]);
$array[2] = array($newArray[8],$newArray[9],$newArray[8],$newArray[9]);
$array[3] = array($newArray[12],$newArray[13],$newArray[14],$newArray[15]);
Fica BEM feio, mas funciona....
Danilo, obrigado pela ajuda, mas eu esqueci de um detalhe muito importante...
Eu dei esse exemplo de 4x4, mas existirão outras matrizes com outras dimensões, até 20x20...então teria de ser algo dinâmico
Na verdade a solução sempre sera uma matriz quadrada nxn ou existiriam matrizes de 16x4 ???
Bem vamos precisar agora de + duas variáveis no minimo...
$linha = 16; // numero de linhas na matriz
$coluna = 4; // numero do colunas da matriz
$newArray = explode(",", $string);
for($i=0;$i<$linha;$i++)
{
for($k=0; $k<$coluna;$k++)
{
$array[$i][$k] = $newArray[($i*$coluna) + $k];
}
}
Se a matriz for sempre quadrada da pra determinar linha e coluna pelo numero de elementos.
Não testei o código mas acho que vai dar certo...
Apenas como observação:MATRIZ e ARRAY não são a mesma coisa.
Apenas como observação:MATRIZ e ARRAY não são a mesma coisa.
valha pensei que era a mesma coisa :o, qual a diferença ?
MATRIZ é um conjunto de m x n elementos arranjados em forma de m linhas e n colunas.
A localização de um dado elemento, é designada pela sua posição na linha e na coluna ao qual pertence.
Uma matriz se diz QUADRADA quando tem o mesmo número de linhas e colunas.
Uma matriz composta de uma só LINHA é denominada VETOR LINHA.
Uma matriz composta de uma só COLUNA é denominada VETOR COLUNA.
Adicionalmente, uma matriz pode ser classificada como: IDENTIDADE, DIAGONAL, NULA, TRANSPOSTA, SIMÉTRICA, ANTI-SIMÉTRICA, CONJUGADA, ETC.
( Não vou discorrer sobre cada uma delas, pois isto faz parte de curso especializado )
MATRIZES são definidas para o "espaço bidimensional".
Seus elementos são numéricos.
Usam dois índices para cada elemento (i,j) => (linha, coluna) => i e j são os índices do elemento genérico.
A álgebra das MATRIZES é importante em vários campos do conhecimento, entre eles, COMPUTAÇÃO, FOTOGRAFIA DIGITAIS.
Algumas linguagens de programação apresentam apresentam algoritmos próprios para manipulação direta de MATRIZES.
( C e FORTRAN são exemplos )
A php não manipula - diretamente - MATIZES, entretanto, apresenta uma série de funções para trabalho com ARRAYS.
ARRAY é um conjunto de m elementos arranjados linearmente, conforme formato especificado,
UNIDIMENSIONAL TRADICIONAL, (UNIDIMENSIONAL PADRÃO), onde,
ÍNDICES, (INTEGER), POSITIVOS SEQUENCIAIS e
PRIMEIRO ÍNDICE, sempre IGUAL a ZERO.
ELEMENTOS, (STRING, INTEGER e/ou FLOAT)
$a01 = array ( 2, 8, 18, "OOPS", 123.456 ); // Notação da php 5.4.0-
$a01 = [ 2, 8, 18, "OOPS", 123.456 ]; // Notação da php 5.4.0+
UNIDIMENSIONAL ASSOCIATIVA, onde,
ÍNDICES, (INTEGER e/ou STRING)
PRIMEIRO ÍNDICE, NÃO necessariamente IGUAL a ZERO
SE todos os ÍNDICES forem do tipo INTEGER, não precisarão ser sequenciais
ÍNDICES do tipo FLOAT, serão convertidos para INTEGER.
ELEMENTOS, (STRING, INTEGER e/ou FLOAT)
a ) ÍNDICES tipo STRING
$a02 = array ( "me" => "ed48", "she" => "Norma", "score" => 10 ); // Notação da php 5.4.0-
$a02 = [ "me" => "ed48", "she" => "Norma", "score" => 10 ]; // Notação da php 5.4.0+
=> é designado como conector ÍNDICE, ELEMENTO.
b ) ÍNDICES tipo INTEGER (NEGATIVOS)
$a03 = array (-2 => 21.456, -82 => 'Salve, Salve...');
$a03 = [ -2 => 21.456, -82 => 'Salve, Salve...' ];
c ) ÍNDICES do tipo FLOAT
$a04 = array (1.23 => 8, 5.44 => 'Test 1');
$a04 = [ 1.23 => 8, 5.44 => 'Test 1' ];
MULTIDIMENSIONAL COMUM
ÍNDICES, (INTEGER), POSITIVOS SEQUENCIAIS e
PRIMEIRO ÍNDICE, sempre IGUAL a ZERO.
ELEMENTOS, (STRING, INTEGER e/ou FLOAT)
PELO MENOS um dos ELEMENTOS deve ser uma ARRAY.
$a05 = array ("países", "continentes", array("Brasil", "Portugal"), array("América do Sul", "Europa"));
$a05 = ["países", "continentes", ["Brasil", "Portugal"], ["América do Sul", "Europa"]];
neste caso,
$a05[0] = "países";
$a05[1] = "continentes";
$a05[2][0] = "Brasil";
$a05[2][1] = "Portugal";
$a05[3][0] = "América do Sul";
$a05[3][1] = "Europa";
MULTIDIMENSIONAL ASSOCIATIVA
ÍNDICES, (INTEGER e/ou STRING)
PRIMEIRO ÍNDICE, se INTEGER, não mecessáriamente igual a ZERO.
ÍNDICES, se do tipo INTEGER, não precisam ser sequenciais.
Pelo menos dois ÍNDICES com TIPOS DIFERENTES.
Nenhum ÍNDICE pode ser ARRAY.
ÍNDICES do tipo FLOAT, serão convertidos para INTEGER.
ELEMENTOS, (STRING) e/ou (INTEGER) e/ou (FLOAT) e/ou ARRAY
PELO MENOS um dos ELEMENTOS deve ser ARRAY.
$a06 = ["países" => ["Brasil", "Portugal"], "continentes" => ["América do Sul", "Europa"]];
neste caso,
$a06['países'][0] = "Brasil";
$a06['países'][1] = "Portugal";
$a06['continentes'][0] = "América do Sul";
$a06['continentes'][1] = "Europa";
ARRAYS usam o espaço MULTIDIMENSIONAL.
Seus ÍNDICES, também denominados CHAVES, podem ser numéricos ou não.
Cada elemento é localizado por apenas um ÍNDICE, nas ARRAYS UNIDIMENSIONAIS.
Nas ARRAYS MULTIDIMENSIONAIS, cada ELEMENTO, pode ser localizado por um número diferente de ÍNDICES, (CHAVES).
As operações disponíveis na php para lidar com ARRAYS são particulares e diferentes das operações algébricas disponíveis para MATRIZES.
Em algumas situações, os dados, classificados como MATRICIAIS, podem ser manipulados por ARRAYS, através de uma solução alternativa, (workaround), então, dependente do conhecimento matemático do utilizador.
Algumas das funções para tratamento de imagens na php, (gd e imagemagic), usam ARRAYS em operações eminentemente MATRICIAIS, como por exemplo: convolution e affine.
A recuperação de dados provenientes de bancos de dados, configura-se como uma ARRAY.
Fernandes pode explanar um pouco mais, sempre tratei o array com a representação na matiz na programação, em que termos se diferenciam ?
cara demorei um pouco para conseguir fazer o que você queria, mais consegui :p
<?php
$string = '0.1752, 0.0245, 0.0247, 0.0247, 0.0247, 0.0221, 0.0147, 0.0347, 0.0217, 0.0547, 0.0247, 0.0847, 0.0247, 0.0747, 0.0947, 0.0147,0.00';
//quebra a string em array
$str_ex = explode(',',$string);
//quantidade de arrays dentro de cada grupo
$col = 4;
//quantidade de grupos
$count = ceil(count($str_ex) / $col);
//cria uma nova array.
for($i = 0; $i < $count; $i++):
$prox = $i * $col;
$result[$i] = array_slice($str_ex,$prox,$col);
endfor;
//mostra o resultado
echo "<pre>";
print_r($result);
echo "</pre>";
?>
se ajudou clica => /applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_images/imasters/rep_up.png&key=69f1cee84b0cec2770cf4978eb26283900cc6cd53272a52e2e7da158a809e582" alt="rep_up.png" />
e marca como resolvido.
esse tópico esta resolvido com o post #8
Acho que quem tem que dizer se o bagulho tá resolvido é o autor do tópico, não?
rs veja qual poste resolveu seu problema e marque como resolvido.
Olá galera, quando postei aqui, era uma duvida na cabeça antes de começar a implementar a tela, mas quando comecei com layout, pegando valores da tela, vi que era mais em baixo a coisa...
Bem, vou postar aqui meu código todo, se alguem tiver tempo e puder ajudar, ficarei muito grato.
Não se atentem muito ao código todo, acho que o problema só está na função
function Resultado(){...}
do javascript
Se vcs conseguirem rodar isso, preencham a coluna a ser digitada com valor 1 para os quatro campos
Aí a primeira coluna chamada de "multiplica 1" ficará assim:
1
0.5
0.333
0.25
A coluna "multiplica 2" está assim
2, 3, 7, 1
3, 6, 9, 4
2, 8, 5, 3
7, 2, 3, 6
a multiplicação tem que ser feita da seguinte maneira...
(12) + (0.53) + (0.3337) + (0.251) = resutado
(13) + (0.56) + (0.3339) + (0.254) = resutado
(12) + (0.58) + (0.3335) + (0.253) = resutado
(17) + (0.52) + (0.3333) + (0.256) = resutado
banco de dados
CREATE TABLE tb_torres
(
id_torre INT(11) AUTO_INCREMENT PRIMARY KEY,
codigo_cliente INT(11),
nome_torre VARCHAR(50),
AEV_max VARCHAR(50),
matriz_grande VARCHAR(1000),
tamanho_matriz INT(3)
);
insert into tb_torres (codigo_cliente, nome_torre, AEV_max, tamanho_matriz, matriz_grande) values('1', 'torre1', '1', '13', '2, 3, 7, 1');
insert into tb_torres (codigo_cliente, nome_torre, AEV_max, tamanho_matriz, matriz_grande) values('1', 'torre1', '2', '13', '3, 6, 9, 4');
insert into tb_torres (codigo_cliente, nome_torre, AEV_max, tamanho_matriz, matriz_grande) values('1', 'torre1', '3', '13', '2, 8, 5, 3');
insert into tb_torres (codigo_cliente, nome_torre, AEV_max, tamanho_matriz, matriz_grande) values('1', 'torre1', '4', '13', '7, 2, 3, 6');
codigo
<?php
$conexao = mysql_connect("localhost", "login","senha");
$db = mysql_select_db("matriz", $conexao);
mysql_set_charset('utf8',$conexao);
$sql = "select id_torre, codigo_cliente, nome_torre, AEV_max, matriz_grande, tamanho_matriz from tb_torres order by id_torre";
$rs = mysql_query($sql, $conexao);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Calculo matriz</title>
<script type="text/javascript">
function Calcula(id_torre){
var f1 = document.form1;
var valor_digitado = document.getElementById('valor_digitado_' + id_torre).value; //retorna o valor digitado
var AEV_max = document.getElementById('AEV_max_' + id_torre).value; //retorna o AEV_max
eval('document.form1.fracao_' + id_torre).value = valor_digitado / AEV_max; //faz o calculo da fração
var fracao = document.getElementById('fracao_' + id_torre).value; //valor da fracao
document.getElementById('fracao_recebe_' + id_torre).value = document.getElementById('fracao_' + id_torre).value; //valor campo hidden da fracao
Resultado();
}
function Resultado(){
var coluna_fracao = document.getElementsByName('fracao');
for(i=0;i<coluna_fracao.length;i++){
var cf = coluna_fracao[i];
alert(cf.value);
}
var matriz_grande = document.getElementsByName('matriz_grande');
for(i=0;i<matriz_grande.length;i++){
var mg = matriz_grande[i];
alert(mg.value);
transforma=mg.value.split(",");
}
}
</script>
<style type="text/css">
body {
background-color: #999999;
}
body,td,th {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
}
.style3 {font-size: 36px; font-weight: bold; }
.redimensionar_imagem{
display: block;
margin-left: auto;
margin-right: auto;
height: 500px;
width: 220px;
}
</style>
</head>
<form name="form1" action="torres.php" method="post">
<body>
<table width="70%" align="center" bgcolor="FFFFFF">
<tr>
<td>
<img src="" width="200" height="75" style="padding-left: 15px" />
</td>
<td>Formulário de XXX XXX XXX XXX XXX </td>
</tr>
<tr>
<td style="padding-left: 15px"><b>Código do Cliente:</b> <?php echo "23455";?></td>
<td style="padding-right: 80px"><b>Selecione o Código da Obra:</b>
<select>
<option value="">Selecione um Código...
<option>233</option>
<option>935</option>
<option>333</option>
</select>
</td>
</tr>
<tr>
<td style="padding-left: 15px"><b>Nome do Cliente:</b> <?php echo "Seccional";?></td>
<td><b>Selecione o Site:</b>
<select>
<option value="">Selecione um Site...
<option>Site 1</option>
<option>Site 2</option>
<option>Site 3</option>
</select>
</td>
</tr>
</table>
<table width="70%" align="center" bgcolor="FFFFFF" style="padding-left: 12px">
<tr>
<td width="20%">
<table align="left" height="570" width="250">
<tr>
<td bgcolor="#CCCCCC" align="center">
<img src="" class="redimensionar_imagem"/>
</td>
</tr>
</table>
</td>
<td width="20%" align="left">
<table align="left">
<tr height="40">
<td width="35%" style="text-align: center;" bgcolor="#CCCCCC"><b>Altura máxima m²</b></td>
<td width="50%" style="text-align: center;" bgcolor="#CCCCCC"><b>Digitar aqui</b></td>
<td width="50%" style="text-align: center;" bgcolor="#CCCCCC"><b>multiplica 1</b></td>
<td width="50%" style="text-align: center;" bgcolor="#CCCCCC"><b>multiplica 2</b></td>
<td width="50%" style="text-align: center;" bgcolor="#CCCCCC"><b>Resultado nessa coluna</b></td>
</tr>
<?php
while ($reg = mysql_fetch_array($rs)){
$id_torre = $reg['id_torre'];
$codigo_cliente = $reg['codigo_cliente'];
$nome_torre = $reg['nome_torre'];
$AEV_max = $reg['AEV_max'];
$matriz_grande = $reg['matriz_grande'];
$tamanho_matriz = $reg['tamanho_matriz'];
?>
<tr>
<td><input type="text" size="20%" style="text-align: right; border: 0;" readonly="readonly" id="AEV_max_<?php print $id_torre?>" value="<?php print $AEV_max?>"></input></td>
<td width="50%" style="text-align: center;">
<input type="text" size="25%" onkeyup="Calcula('<?php print $id_torre?>')" id="valor_digitado_<?php print $id_torre ?>" onclick="javascript:if(this.value==0){this.value='';}" onblur="javascript:if (this.value=='') {this.value='0'} mudar_cor_out(this);" value="0" style="text-align: center">
</td>
<!-- HIDDEN COM O VALOR DA FRAÇÃO -->
<input type="hidden" id="fracao_<?php print $id_torre ?>" name="fracao_<?php print $id_torre ?>" value="0" readonly="readonly" size="10"></input>
<td><input type="text" id="fracao_recebe_<?php print $id_torre?>" name="fracao" size="5" value="0" ></input></td>
<!-- HIDDEN COM O VALOR DA FRAÇÃO -->
<!-- CAMPOS MATRIZ GRANDE -->
<td><input type="text" size="20%" style="text-align: right; border: 0;" readonly="readonly" name="matriz_grande" id="matriz_grande_<?php print $id_torre?>" value="<?php print $matriz_grande?>"></input></td>
<!-- CAMPOS MATRIZ GRANDE -->
<!-- CAMPOS QUE RECEBE O RESULTADO DA MULTIPLICACAO -->
<td><input type="text" name="resultado" size="5" value="0" ></input></td>
<!-- CAMPOS QUE RECEBE O RESULTADO DA MULTIPLICACAO -->
</tr>
<?php
}
?>
</table>
</td>
<td width="20%">
<table bgcolor="#CCCCCC" align="center" height="130" width="250">
<tr>
<td align="center" valign="top" style="font-size: 30px;">Resumo
<img src="images/aprovado.png" width="32" height="32"/>
</td>
</tr>
<tr>
<td valign="top"><b>Cliente:</b> <?php echo "teste";?></td>
</tr>
<tr>
<td valign="top"><b>Status:</b> <?php echo "Aprovado";?></td>
</tr>
<tr>
<td>
<b>Análise:</b>
<input type="button" value="Enviar">
</td>
</tr>
</table>
<table align="center" height="440" width="250">
<tr>
<td></td>
</tr>
</table>
</td>
</tr>
<tr>
<table>
<table align="center">
<tr>
<!-- <td colspan="2" valign="middle" bgcolor="#CCCCCC"><img src="images/env.jpg" width="76" height="31" /></td> -->
<td><input type="submit" value="Calcular" style="cursor: pointer" > </td>
</tr>
</table>
</table>
</tr>
</table>
</body>
</form>
</html>cara eu nem vou ver esse código que você postou ai, nos estamos aqui e para ajudar, e não fazer seu trabalho
o post que coloquei #8, tinha resolvido seu problema, ate mesmo ja estava marcado como tal.
ai depois você vem com outro problema.
veja onde esta o erro em seu sistema, e abra outro post com o novo problema, por esta já foi resolvido.
>
cara eu nem vou ver esse código que você postou ai, nos estamos aqui e para ajudar, e não fazer seu trabalho
o post que coloquei #8, tinha resolvido seu problema, ate mesmo ja estava marcado como tal.
ai depois você vem com outro problema.
veja onde esta o erro em seu sistema, e abra outro post com o novo problema, por esta já foi resolvido.
Não quero que ninguém faça meu trabalho, apenas não tem como eu postar uma função e tentar resolver com a ajuda de vcs!! Preciso dos id's dos registros do banco, não tem como eu resolver postando apenas um pedaço de função javascript
>
Não quero que ninguém faça meu trabalho, apenas não tem como eu postar uma função e tentar resolver com a ajuda de vcs!! Preciso dos id's dos registros do banco, não tem como eu resolver postando apenas um pedaço de função javascript
esse post já foi resolvido, abra um outro post com sua nova duvida.
esse post já foi resolvido, abra um outro post com sua nova duvida.
Ok, abrirei outro!
Para fazer de modo mais simples explode deveria ter um delimitador diferente a cada 4 tipo um "|" dai dava um explode e explode em cada membro do array.
Nesse caso vai ter que ser mais manual.
$newArray = explode(",", $string)
// aqui você tem o array com os 16 numero
Fica BEM feio, mas funciona....