Ir para conteúdo

POWERED BY:

Arquivado

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

marciarf

criar array com variáveis

Recommended Posts

gente

preciso criar uma array bidimensional cujos indices sao duas variaveis

 

$dado1[$i] e $dado2[$i]

tipo: $array=($dado1[$i],$dado2[$i]);

Como faço isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

se for isso, pode-se implementar uma montagem de array, ordenando pelo indice $i

 

:

 

<?php

$dado1 = array(1,2);
$dado2 = array(50,3);
$arrayCompleta = array();

for($i = 0; $i < 2; $i++)
{

	$arrayCompleta[$i] = array("dado1"=>$dado1[$i], "dado2"=>$dado2[$i]);
}

echo "<pre>";
print_r($arrayCompleta);
echo "</pre>";

?>

Att.,

Andrey Moretti

Compartilhar este post


Link para o post
Compartilhar em outros sites

o php aceita string como indice nos arrays

 

até mesmo caracteres multibyte são permitidos

 

mas por questões de performance, obviamente que não é recomendável utilizar essa prática em todos os arrays.

 

faça somente onde realmente houver necessidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

meu código é assim:

 

//cálculo da quantidade para jogar nos eixo y4 - estoque máximo
$ver="SELECT numrecurso,data_ini_fase,data_fim_fase FROM tab_fases WHERE nomeprojeto='".$nome."' AND numrecurso=".$material." ORDER BY data_ini_fase ASC";
$query=mysql_query($ver);
$numero=mysql_num_rows($query);

 $i=0;
 while($read=mysql_fetch_array($query)){
   $dado_ini[$i]=$read['data_ini_fase'];
   $dado_fim[$i]=$read['data_fim_fase'];

  $sql5 = "SELECT picoestoque_fase FROM tab_fases WHERE nomeprojeto='".$nome."' AND numrecurso=".$material." AND data_ini_fase=".$dado_ini[$i];
  $res6 = mysql_query($sql5,$db);
  $resultado = mysql_fetch_array($res6);
  $pico[$i]=$resultado['picoestoque_fase'];

  $dado_fase=array();
  $dado_fase[$i] = $dado_fim[$i];
  $dado_fase[$i] = $pico[$i];
   print "dado_fase[$i]'[dado_fim[$i]']=".$dado_fase[$i]['dado_fim[$i]']."<br>";
  $i++;
 }

  $j=0;
  $fase=0;
		while($j < $X){
		  if (!in_array(gmdate("w",$DATA1),$noworkingdays)){
			 $DATA1_t[$j]=$DATA1;
			   if($DATA1_t[$j] <= ($dado_fase[$fase]['dado_fim'])){
				 $datay4[$j] = $dado_fase[$fase]['dado_fim']; //pontos da linha de estoque máximo
			   }else{
				 $fase++;
			   continue;
			 }
		  $j++;
		 }
		 $DATA1 += 86400;
	   }

Onde primeiro faço uma query no banco de dados onde estará armazenado para um determinado material, uma data de inicio de fase, uma de fim de fase e o pico de estoque para aquela fase. Posso ter n fases, e sempre terei entao o material, o inicio da fase, o final e o pico.

Entao vem o while pra ler pra cada material o valor de inicio e final. Na sequencia do mesmo while faço uma query no bd para capturar o pico de estoque da fase, tambem para cada material. Entao quando $i=0, capturei um valor de inicio de fase, um de fim de fase e um de pico de estoque do material pra aquela fase . Ok, agora preciso gerar um array com esses dados:

$dado_fase=array();
  $dado_fase[$i] = $dado_fim[$i];
  $dado_fase[$i] = $pico[$i];
O que acho que deve estar errado.

No outro looping o que faço é, a partir de uma data inicial que uso pra gerar um grafico, abrir o intervalo pra 30 dias, pois $X=30.

Em seguida testar se o cada dia é menor ou igual ao valor armazenado no array pra dado_fim (final da primeira fase), pra gerar os pontos de uma linha [$datay4] que traçará uma linha de pico de estoque máximo pra cada fase. Se o valor da data DATA1_t é maior que a data de fim de uma fase, vou pro else e incremento o contador fase. Infelizmente, da maneira que está no código, nao tem funcionado. Necessito ajuda...

 

 

o php aceita string como indice nos arrays

 

até mesmo caracteres multibyte são permitidos

 

mas por questões de performance, obviamente que não é recomendável utilizar essa prática em todos os arrays.

 

faça somente onde realmente houver necessidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi aquele primeiro While. Porque precisa fazer a duas consultas?

 

Podem existir duas ou mais fases com o mesmo material, do mesmo projeto, com a mesma data de inicio e somente a data final diferente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem razão JCMPJ

Realmente posso fazer junto com a primeira consulta. Fiz e tá certo pois serao sempre as mesmas fase com o mesmo inicio e mesmo fim. É isso mesmo.

Mas agora o problema continua com o array...

 

Não entendi aquele primeiro While. Porque precisa fazer a duas consultas?

 

Podem existir duas ou mais fases com o mesmo material, do mesmo projeto, com a mesma data de inicio e somente a data final diferente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o array ficou assim:

$dado_fase[$i]=array($dado_fim[$i],$pico[$i]);
usei um foreach pra ler o array e ele está correto. o problema agora e usar o valor no if

if($DATA1_t[$j] <= ($dado_fase[$fase]['dado_fim'])){
			$datay4[$j] = $dado_fase[$fase]['dado_fim'];
}
já que dessa maneira que estou tentando fazer nao tem funcionado.

Alguém sabe me dizer como ? ou seja a sintaxe para o if, para ler os valores de dado_fim dentro do array ?

 

tem razão JCMPJ

Realmente posso fazer junto com a primeira consulta. Fiz e tá certo pois serao sempre as mesmas fase com o mesmo inicio e mesmo fim. É isso mesmo.

Mas agora o problema continua com o array...

 

Não entendi aquele primeiro While. Porque precisa fazer a duas consultas?

 

Podem existir duas ou mais fases com o mesmo material, do mesmo projeto, com a mesma data de inicio e somente a data final diferente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que assim da certo?

 

$sql = "SELECT * FROM tab_fases WHERE nomeprojeto='".$nome."' AND numrecurso=".$material." ORDER BY data_ini_fase";

$rs  = mysql_query($sql);

$linha = 0;
$DATA1 = ?;

if (mysql_num_rows($rs)) {
	while ($dados = mysql_fetch_assoc($rs)) {
	   if ( !in_array(gmdate("w",$DATA1),$noworkingdays) &&
			$DATA1 >= $dados['data_ini'] &&
			$DATA1 <= $dados['data_fim'] &&
			$linha < $X ) {

				$dados[$linha]['dataPlot'] = $DATA1;
				$dados[$linha]['data_ini'] = $dados['data_ini'];
				$dados[$linha]['data_fim'] = $dados['data_fim'];
				$dados[$linha]['picoFase'] = $dados['picoFase'];
				$dados[$linha]['material'] = $dados['material'];

				$linha++;

	   };

	   $DATA1 += 86400;
	   
	};
}

É só um exemplo não ligue para o nome dos campos e o formato das datas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara o problema nao é a logica. esta está correta e funcionando do jeito que está, o problema é fazer um array bidimensional com os valores capturados das variáveis $dado_fim e $pico

veja:

elas estão dentro de um while cujo contador é o $i que representa o numero de dado_ini, dado_fim e pico que existe no bd, ou seja, o numero de fases e o pico correspondente.

A questao é criar esse array com esses valores, é isso que nao estou sabendo fazer e depois acessar no while seguinte. são apenas duas coisas..

criar o array, que nao sei se crio dentro do primeiro while ou fora, se crio como sendo $dado_fase[$i] [que eu acredito que não, pq senao seria, pra 2 fases p ex, $dado_fase[0] e $dado_fase[1]], se eu crio fora como eu pego os dois valores de dado_fim e pico pra cada fase. entende? meu problema é conceitual de como criar esse array. não encontrei nada na net desse jeito..

 

 

Será que assim da certo?

 

$sql = "SELECT * FROM tab_fases WHERE nomeprojeto='".$nome."' AND numrecurso=".$material." ORDER BY data_ini_fase";

$rs  = mysql_query($sql);

$linha = 0;
$DATA1 = ?;

if (mysql_num_rows($rs)) {
	while ($dados = mysql_fetch_assoc($rs)) {
	   if ( !in_array(gmdate("w",$DATA1),$noworkingdays) &&
			$DATA1 >= $rs['data_ini'] &&
			$DATA1 <= $rs['data_fim'] &&
			$linha < $X ) {

				$dados[$linha]['dataPlot'] = $DATA1;
				$dados[$linha]['data_ini'] = $dados['data_ini'];
				$dados[$linha]['data_fim'] = $dados['data_fim'];
				$dados[$linha]['picoFase'] = $dados['picoFase'];
				$dados[$linha]['material'] = $dados['material'];

				$linha++;

	   };

	   $DATA1 += 86400;
	   
	};
}

É só um exemplo não ligue para o nome dos campos e o formato das datas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uai! Então não consegui entender o que você vai fazer.

 

Porque nesse array ai em cima você tem data de inicio, data do fim, valor do pico, data corrente ... não seria apenas colocar os valores usando $dados[$i]['dataPlot'] com eixo Y ?

 

que mais você precissa para mantar esse gráfico?

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, conseguiiiiiiii

muitissimo obrigada por tentar colaborar comigo, estou realmente precisando

mas uma luz baixou aqui e eu consegui gerar o array e jogar os pontos da linha no grafico...

muito obrigada mesmo, valeu...

 

Uai! Então não consegui entender o que você vai fazer.

 

Porque nesse array ai em cima você tem data de inicio, data do fim, valor do pico, data corrente ... não seria apenas colocar os valores usando $dados[$i]['dataPlot'] com eixo Y ?

 

que mais você precissa para mantar esse gráfico?

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.