Ir para conteúdo

POWERED BY:

Arquivado

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

Vitor Luis_78306

[Resolvido] While dentro de um Array!

Recommended Posts

Fala galera,

Estou martelando a cabeça a algumas horas para criar uma solução em PHP + JSON, mas está difícil encontrar solução para o que eu preciso!

 

Estou tentando criar o seguinte JSON com o PHP:

 

{
'itens':	3,

'user':	[
	{ 'uid': '001', 'name': 'Beltrano', 'phone': '+55 11 999 999 99', 'mail': 'beltrano@aol.com' },
	{ 'uid': '002', 'name': 'Ciclano', 'phone': '+55 11 999 999 99', 'mail': 'ciclano@aol.com' },
	{ 'uid': '003', 'name': 'Fulano', 'phone': '+55 11 999 999 99', 'mail': 'fulano@aol.com' }
]
}

 

Todo o conteúdo seria pego no banco de dados, e o campo "itens" seria preenchido com o número de registros, enquanto o conteudo de 'user' no caso, seria o while com o resultado da query MySQL.

 

Seria tudo mais ou menos assim:

$sql = "SELECT * FROM agenda ORDER BY contact_uid ASC;";
$sql = mysql_query($sql)or die(mysql_error());
$num = mysql_num_rows($sql);

$res = array(
	'itens'=>$num,

	while($row = mysql_fetch_array($sql)){
		array('uid'=>$row['contact_uid'], 'name'=>$row['contact_name'], 'phone'=>$row['contact_phone], 'mail'=>$row['contact_phone']);
	}
);

$res = json_encode($res);

 

O grande problema é que o PHP não permite que eu crie um while dentro do array, como posso solucionar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Prog,

Se não for pedir muito, tem como postar um exemplo dos mais simples sobre como eu poderia usar o array_push? Li a documentação do PHP e pelo o que entendi ele serve para colocar dados dentro do array (assim como se eu fizesse um $array['campo'] .= 'teste'), mas o que preciso é de algo que me permita colocar outro array dentro de um array!

 

Seria algo como:

 

<?php
$res = array(
	'itens'=>	3,

	'users'=>array(
	)
);

for($i=0; $i<=2; $i++){
	if($i == 0){
		$res['users'][] = array('uid'=>'001', 'name'=>'Beltrano');
	}

	if($i == 1){
		$res['users'][] = array('uid'=>'002', 'name'=>'Ciclano');
	}

	if($i == 2){
		$res['users'][] = array('uid'=>'003', 'name'=>'Fulano');
	}
}

$res = json_encode($res);
echo $res;
?>

 

Só que neste código dá o erro de conversão da array para string (que é justamente o que eu quero evitar).

 

Mas desde já agradeço pela sua ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode perfeitamente colocar um array dentro de outro. É assim que nascem as matrizes multidimensionais.

 

O que você não pode é usar um array como índice dessa matriz. Inteiros e strings, em contrapartida, são aceitos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode perfeitamente colocar um array dentro de outro. É assim que nascem as matrizes multidimensionais.

 

O que você não pode é usar um array como índice dessa matriz. Inteiros e strings, em contrapartida, são aceitos.

 

Bruno,

Sim sim, perfeito! Mas como disse, o meu problema não é o array dentro do outro, mas sim o WHILE dentro do array, para que os array sejam criados dinamicamente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não importa como você vai criar esse array, contanto que sejam respeitadas essas linhas gerais, tanto faz.

 

A diferença entre a [sintaxe de colchetes] e array_push(), é que a função exige que o array tenha sido previamente criado.

 

Porém, como é uma boa prática inicializar um array antes de um loop que venha a manipulá-lo, é indiferente.

 

Sem problema na verdade é não compreender que while, foreach, for são estrutura de repetição e não valores a serem inseridos.

 

Isso:

 

$res = array(
               'itens'=>$num,

               while($row = mysql_fetch_array($sql)){
                       array('uid'=>$row['contact_uid'], 'name'=>$row['contact_name'], 'phone'=>$row['contact_phone], 'mail'=>$row['contact_phone']);
               }
       );

Sequer existe.

 

O que você faria aqui é:

 

$res = array();

while( $row = mysql_fetch_array( $sql ) ){

   $res[] = array(

       'items' => $num,
       'uid'   => $row['contact_uid'],
       'name'  => $row['contact_name'],
       'phone' => $row['contact_phone],
       'mail'  =>$row['contact_phone']
   );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tais tentando montar um autocomplete a partir de um banco de dados?

 

Segue como resolvi um problema bem parecido:

 

$q = strtolower($_GET["q"]);
if (!$q) return;

$result = mysql_query("SELECT * FROM tbl ORDER BY tbl.descricao");
   while ($myarr = mysql_fetch_array($result)) {
     echo"".$myarr['descricao']."\n";
   }
foreach ($myarr as $key=>$value) {
   	if (strpos(strtolower($key), $q) !== false) {
   		echo "$key|$value\n";
   }
}

 

Na verdade, percebi que o mysql_fetch_array() montava uma espécie de... array hehe.

Num caso mais parecido com o que você precisa, eu resolvi assim:

 

$arr = array();
while($r = mysql_fetch_array($sql_query_result_here)) {
	$code = $r['code'];
	$name = $r['name'];

	$new_arr = array("code" => "$code", name => "$name");

	$arr[] = $new_arr;
}

 

Espero ter ajudado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tais tentando montar um autocomplete a partir de um banco de dados?

 

Segue como resolvi um problema bem parecido:

 

$q = strtolower($_GET["q"]);
if (!$q) return;

$result = mysql_query("SELECT * FROM tbl ORDER BY tbl.descricao");
   while ($myarr = mysql_fetch_array($result)) {
     echo"".$myarr['descricao']."\n";
   }
foreach ($myarr as $key=>$value) {
   	if (strpos(strtolower($key), $q) !== false) {
   		echo "$key|$value\n";
   }
}

 

Na verdade, percebi que o mysql_fetch_array() montava uma espécie de... array hehe.

Num caso mais parecido com o que você precisa, eu resolvi assim:

 

$arr = array();
while($r = mysql_fetch_array($sql_query_result_here)) {
	$code = $r['code'];
	$name = $r['name'];

	$new_arr = array("code" => "$code", name => "$name");

	$arr[] = $new_arr;
}

 

Espero ter ajudado!

 

Juninho,

Ótima solução apresentada! Muito obrigado!

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.