Ir para conteúdo

POWERED BY:

Arquivado

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

Jordan Pinheiro_147113

[Resolvido] array e php

Recommended Posts

Tenho um array array assim

 

$cidade[id_cidade][id_estado] = 'nome_da_cidade';

 

para ler e recuperar os dados eu to usando foreach ai fica assim

 

<select name="estado" id="estado">
   <?php foreach($cidade as $lerEst) {
		foreach($lerEst as $teste) {
	?>
   	<option><?php echo $teste ?></option>
       <?php } } ?>
   </select>

 

essa forma que eu fiz assim funfou beleza.... gostaria de saber se alguém tem alguma dica ou uma forma de fazer isso num foreach só?

e tambem quero saber como pego o id_cidade dentro desse array

 

fico no aguardo....

Compartilhar este post


Link para o post
Compartilhar em outros sites

com array multidimensional(matriz), tem q ser com 2 foreachs ou mais, dependendo de qtas dimensões tiver... eh um foreach pra cada dimensão... pois se a chave tiver mais de um valor, vai fazer o primeiro loop, depois no segundo loop vai pegar todos os valores q tem dentro da chave... e assim por diante...

Compartilhar este post


Link para o post
Compartilhar em outros sites

vlw.. cara agora n entendi como capturar as keys...

 

$array[kay1][kay2] = 'teste';

 

foreach(xxxxxx) {

 

echo kay1 + kay2 = value

 

}

 

eu fiz umas mudanças ai ficou assim

 

<?php
include('arrCidades.php');
if(empty($_POST['estado']) || $_POST['estado'] == 0) {
echo '<option>Selecione um estado acima</option>';	
} else {
$valor = $_POST['estado'];
foreach($cidR[$valor] as $todas) {
echo '<option value="">'.$todas.'</option>';
}
}
?>

 

lembrando q meu array ta assim

 

$cidR[27]["5476"] = "Fátima"; 
$cidR[5]["409"] = "Fátima"; 
$cidR[12]["1520"] = "Fátima do Sul"; 
$cidR[18]["2893"] = "Faxinal"; 
$cidR[23]["4012"] = "Faxinal do Soturno"; 
$cidR[24]["4498"] = "Faxinal dos Guedes"; 
$cidR[23]["4013"] = "Faxinalzinho"; 
$cidR[9]["968"] = "Fazenda Nova"; 
$cidR[18]["2894"] = "Fazenda Rio Grande"; 
$cidR[23]["4014"] = "Fazenda Vilanova"; 
$cidR[1]["86"] = "Feijó"; 
$cidR[5]["410"] = "Feira da Mata"; 
$cidR[5]["411"] = "Feira de Santana"; 
$cidR[2]["129"] = "Feira Grande"; 
$cidR[16]["3242"] = "Feira Nova"; 
$cidR[25]["5370"] = "Feira Nova"; 

 

agora eu preciso saber como pegar a key 2

 

tipo

$cidR[ key 1] [key 2]
echo key 2 = cidade

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito mais simples se você tiver uma estrutura assim:

 

$cities = array(

   array( 24, 5476, 'Fátima' ),
   array(  5,  409, 'Fátima' ),
   array( 12, 1520, 'Fátima do Sul' )
);

Pois daí, com um loop só, você pega tudo de que precisa de uma só vez.

 

E com uma ajudinha de list(), pode até melhorar a legibilidade do código, já que os índices são todos numéricos:

 

print "<select name=\"cities\" id=\"cities\">\n\n\t";

foreach( $cities as $city ) {

   list( $cityID, $stateID, $cityName ) = $city;

   printf(

       "<option value=\"%s\"%s>%s</option>\n\t",

       ( isset( $_POST['cities'] ) && $_POST['cities'] == $cityID ? 'selected="selected"' : NULL ),

       $cityID, $cityName
   );
}

print "\n<select>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu poderia te dar a resposta de graça, mas prefiro te ensinar a pesquisar sozinho.

 

Você já sabe exatamente o que quer fazer, então leia o Livro de Array (calma, não é um livro de verdade :P ) e tente implementar.

 

Se não conseguir, eu te ajudo.

 

Essa filtragem, você faria ANTES de entrar no loop. Se pra você tanto faz, dentro ou fora, um IF-zinho dentro do foreach também resolve.

 

O problema dessa abordagem é que a comparação será executada sobre TODOS os registros. Se você tiver 5600 índices (+/- a quantidade de cidades brasileiras), serão 5600 condicionais sendo testados, o que derruba a performance.

Compartilhar este post


Link para o post
Compartilhar em outros sites

srsrs pq assim quando eu fiz usando foreach foi bem simples e rapido tipo foreach($cidades[idEstado] as $listar) {

 

 

você acha que fazendo dessa forma vai quebrar a performance? pq eu to usando array justamente pq o site tem muito acesso e n quero sobrecarregar o banco com select multiplos o tempo todo

 

eu quero desempenho... o q você me recomenda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nessa estrutura que eu propus, o seu oitavo ídice teria apenas um grupo de três informações, de uma única cidade

 

Logo você precisaria filtrar a apenas àqueles cujo segundo índice for igual a oito (ou outro, que acredito vir via GET).

 

A quebra de performance é bem como eu disse. Tudo aquilo que existe dentro de um loop, é executado tantas vezes quantas forem necessárias até sair dele.

 

Tudo bem que um IF simples, comparando o ID do estado, não é lá muito complexo e executaria rápido, mesmo que feito 5600 vezes.

 

Mas foi mais uma dica para situações futuras: Evite complexidade em loops grandes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, você não precisou de nada disso, porém sua estrutura exigia um array multidimensional, te forçando a usar dois loops aninhados.

 

Experimenta como eu disse, não dói nada. :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

conseguir com

print_r(array_values($cR));

 

resultado final

 

<?php
include('arrCidades.php');

$teste = array_values($cR);
foreach($teste[5] as $key => $val) {
echo $key .' => '.$val.'<br>';
}
?>

 

n usei if e ficou super rápido

 

<?php
include('arrCidades.php');

$teste = array_values($cR);
foreach($teste[$_POST['estado']] as $key => $val) {
echo '<option value="'.$key .'">'.$val.'</option>';
}

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.