Foros del Web » Programando para Internet » PHP »

Transformar array al tipo mysql_fetch_assoc

Estas en el tema de Transformar array al tipo mysql_fetch_assoc en el foro de PHP en Foros del Web. Hola tengo es siguiente array: Código PHP: Array (          [ 0 ] => Array ( [ id ] =>  1  [ username ] =>  jhon )          [ 1 ] => Array ( [ id ] => - 1  ...
  #1 (permalink)  
Antiguo 01/08/2006, 14:51
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
Transformar array al tipo mysql_fetch_assoc

Hola tengo es siguiente array:

Código PHP:
Array ( 
        [
0] => Array ( [id] => [username] => jhon
        [
1] => Array ( [id] => -[username] => Anonymous 
        [
2] => Array ( [id] => [username] => admin 
        [
3] => Array ( [id] => [username] => Mato 
        [
4] => Array ( [id] => [username] => pedro 

necesito transformar este array al tipo de arreglo que genera mysql_fetch_assoc
para recorrerlo con un while (registro por registro).

Necesito recorrer el arreglo con while y no con foreach.

¿es posible?
  #2 (permalink)  
Antiguo 01/08/2006, 15:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Lo puedes hacer:

Código PHP:
while ($row=mysql_fetch_assoc($resultado)){
   echo 
$row['id']." --> ".$row['username']."<br>";

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 01/08/2006, 15:20
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
no es lo que necesito, el array no biene de un $resultado=mysql_query('select* from algo'), el array se genera de un xml, y lo entrega completo, ahora me gustaria recorrer ese array del xml mediante un while (algo parecido cuando se recorre el arreglo de mysql_fetch_assoc).
  #4 (permalink)  
Antiguo 01/08/2006, 15:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
No sé por qué tiene que ser un "while" .. un foreach() te vendría bien

Sería algo así:
Código PHP:
foreach ($tu_array as $indice=>$row){
 echo 
$row['id']." --> ".$row['username']."<br>";

Con un "while" .. lo anterior equivaldría a:
Código PHP:
while (list($indice$row) = each($tu_array)) {
   echo 
$row['id']." --> ".$row['username']."<br>"

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 01/08/2006, 15:39
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 21 años, 2 meses
Puntos: 41
Para recorrer un array con while, usa each(). Pero la verdad, eso hace lo mismo que el foreach()... ¿por qué no puedes utilizar foreach?
  #6 (permalink)  
Antiguo 01/08/2006, 15:52
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
Con el tema del xml da lo mismo si lo hago con while o foreach, pero el gran problema es con otro tema:

Resulta que hasta ahora he estado trabajando con una clase de abstraccion de base de datos (la que utiliza phpbb) y ahora quiero empezar a utilizar la de Zend Framework.

el problema es que los metodos de consulta son muy diferentes, en la clase actual genera un array identico al de mysql_fetch_assoc (lo recorro con while) mientras que la clase de Zend genera el array completo (FetchAll del tipo PDO), entonces al pasarme de uno al otro tendría que modificar las miles y miles de consultas y cientos de archivos php de mis proyecto.

Entonces se me ocurrio crear una clase de abstraccion de base de datos que sea extendida de la de zend y transformar los array para no tener que cambiar todos mis scripts.

eso es mi problema.
  #7 (permalink)  
Antiguo 01/08/2006, 15:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Entonces se me ocurrio crear una clase de abstraccion de base de datos que sea extendida de la de zend y transformar los array para no tener que cambiar todos mis scripts.

Ok, ese es tu problema de fondo .. pero a la hora de la implementación .. hacerlo con un "foreach()" o un "while()" .. que problema hay en eso?

Tu vas a realizar tu función/método/classe de conversión .. le pasas tal formato de array y así lo recorreras o lo transformaras en otro modelo de array ..

Haz probado las soluciones propuestas?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 01/08/2006, 16:06
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
aver:

este es un ejemplo de consulta con la actual clase:

Código PHP:
// Ejemplo de consulta tipica
$resultado $db->sql_query('SELECT * FROM tbl_usuario WHERE nick = \'' $_SESSION["usuario"] . '\'');
if (
$db->sql_numrows($resultado)>0)
{
  while(
$filas $db->sql_fetchrow($resultado))
  {
    
print_c($filas);
  }


else 
{
print(
"No hay registros");

tengo miles de consultas de este tipo en mis proyecto y no quiero cambiarlas una por una porque sería eterno.

la clase de abstraccion de zend es de la siguiente forma:

Código PHP:
$result $db->query('SELECT id,username FROM posters');
                                                                
//$result = $db->query('SELECT * FROM');
$rows $result->fetchAll();
foreach (
$rows as $row) {
print 
$row['id']."<br />";
print 
$row['username']."<br />";
print 
$row['email']."<br />";

entonces necesito crear una clase que mantenga los mismos nombres de metodos de la clase actual ($db->sql_fetchrow($resultado)) intermedia la cual transforme los array, pero no encuentro la manera de transformar el array que genera la clase de zend fetchall :
Código PHP:
Array ( 
        [
0] => Array ( [id] => [username] => jhon
        [
1] => Array ( [id] => -[username] => Anonymous 
        [
2] => Array ( [id] => [username] => admin 
        [
3] => Array ( [id] => [username] => Mato 
        [
4] => Array ( [id] => [username] => pedro 

en un array que genera la actual clase (del tipo mysql_fetch_assoc o mysql_fetch_row) el cual se recorre con while:

Código PHP:
while ($row=$db->sql_fetchrow($resultado)){
   echo 
$row['id']." --> ".$row['username']."<br>";

En la implementacion de la clase me da lo mismo si la transformación del array sea con while o foreach, el tema es que en mis scripts php se mantega con while.
  #9 (permalink)  
Antiguo 01/08/2006, 18:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Bueno .. por mi parte de dejé la solución para recorrer un array del tipo que tienes de origen .. así podras "armar" el tipo de array que necesites.

(por mi parte ahora no sè que array de salida debes generar .. haz un print_r() a un resultado de mysql_fetch_array() para verlo si tienes dudas y asì veras más claro como debes componer tu nuevo array.

Por cierto .. no ves que lo que vas hacer es un "parche" y una baja de rendimiento por la conversión de estos arrays? ...Piensatelo ..a veces vale la pena dejar lo que ya está hecho como esté e ir migrando segùn necesites. Pero bueno, esto es una opinión personal.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 01/08/2006, 20:18
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
El array que genera la siguiente consulta:
Código PHP:
$query="SELECT id,username FROM posters";
$result=$db->sql_query($query);
print_r($db->sql_fetchrow($result)); 
solo me genera el primer registro, con el while avanza al segundo y asi sucesivamente, es exactamente lo mismo que hace el mysql_fetch_assoc o mysql_fetch_row:
Código:
Array ( [id] => 1 [username] => admin )
ahora si hago un while de la siguiente forma:
Código PHP:
$query="SELECT id,username FROM posters";
$result=$db->sql_query($query);
while (
$rows=$db->sql_fetchrow($result)){
print_r($rows);

me genera lo siguiente:
Código:
Array ( [id] => 1 [username] => admin ) 
Array ( [id] => 2 [username] => 829381 ) 
Array ( [id] => 3 [username] => 1862 ) 
Array ( [id] => 4 [username] => 750967 ) 
Array ( [id] => 5 [username] => 2020 )
etc.....
mientras que la clase de ZendFramework me genera todo el array de la consulta de una sola vez (sin while ni foreach):

Código PHP:
$result $db->query('SELECT id,username FROM posters');
$rows $result->fetchAll();
print_r($rows); 
me genera:
Código PHP:
Array ( 
0] => Array ( [id] => [username] => admin 
[
1] => Array ( [id] => [username] => 829381 
[
2] => Array ( [id] => [username] => 1862 
[
3] => Array ( [id] => [username] => 750967 
[
4] => Array ( [id] => [username] => 2020 ) ) 

Última edición por zsamer; 01/08/2006 a las 20:29
  #11 (permalink)  
Antiguo 02/08/2006, 06:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Y esactamente que necesitas?

Convertír un array de estructura?:

Código PHP:
Array (  
0] => Array ( [id] => [username] => admin )  
[
1] => Array ( [id] => [username] => 829381 )  
[
2] => Array ( [id] => [username] => 1862 )  
[
3] => Array ( [id] => [username] => 750967 )  
[
4] => Array ( [id] => [username] => 2020 ) ) 
a un array de estructura (bueno .. "arrays" tipo):
Código PHP:
Array ( [id] => [username] => admin 
Array ( [
id] => [username] => 829381 
Array ( [
id] => [username] => 1862 
Array ( [
id] => [username] => 750967 
Array ( [
id] => [username] => 2020 )
etc..... 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 02/08/2006, 12:01
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
no es eso exactamente, me es deficil de expliar, lo que necesito es convertir el array que genera la nueva clase a un array que se pueda "Reporrer mediante un while del tipo mysql_fetch_assoc o mysql_fetch_array", en otras palabras que solo me genere el primer registro (si hago un print_r) pero con el while avanza al segundo y asi sucesivamente, es exactamente lo mismo que hace el mysql_fetch_assoc o mysql_fetch_array.
  #13 (permalink)  
Antiguo 02/08/2006, 12:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues así como lo planteas no puede ser (que yo sepa) ..

No es lo mismo tener un "record-set" que recorrer donde hay un "puntero" que lo vas moviendo y avanzando (como haces con las funciones _fetch_ en general) .. que tener un array dato y recorrerla de una forma u otra.

De todas formas tienes "each()" para ir recorriendo el array como ya te han comentado y en los ejemplos que te puse pudes ver como se usa .. A cada ejecución de un "each()" sobre un array .. avanzas el puntero ...


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 02/08/2006, 13:36
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
ok, perfecto lo suponía, pero no estaba seguro.

Muchas gracias cluster doy por finalizada mi duda.

saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:16.