Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Dreamcacher en 8 Diciembre 2010, 02:05 am



Título: problemas con Arrays PHP
Publicado por: Dreamcacher en 8 Diciembre 2010, 02:05 am
bueno la cuestion, es que ahora mismo estoy trabajando con un sistema que se encarga de conseguir la columna categoria de una tabla llamada noticias, y comprueba si estas existen , si no es asi, guarda el resultado en un array, sino lo desecha...

yo con arrays y php he trabajado muy poco, he trabajado en c++ y delphi y me estoy liando un poco con esto... el problema es que solo me devuelve un valor, el primero, aqui os dejo el codigo...


Código:
<?php

$resultado=mysql_query('select categoria from noticias', $conexion);

$arrayCat2=array();
$i=0;
$r=0;

while($arrayCat=mysql_fetch_array($resultado))
{
for ($i2=0; $i2<$i; $i2++)
{
if ($arrayCat2[$i2] == $arrayCat['categoria'])
{
$r=1;
break;
}
}

if ($r == 0)
{
$arrayCat2[$i] = $arrayCat['categoria'];
}

$i++;
}

foreach ($arrayCat2 as $categoria)
{
echo' <p>
     '.$categoria.'
     </p>';
}
?>


Título: Re: problemas con Arrays PHP
Publicado por: cassiani en 8 Diciembre 2010, 02:26 am
Código:
$arrayCat2=array();
$i=0;
$r=0;

Código:
for ($i2=0; $i2<$i; $i2++)

la variable $i vale 0, el ciclo no se ejecuta ni una sola vez.

usa count para contar los elementos de ese array antes de intentar comenzar el ciclo.
Código:
http://php.net/manual/es/function.count.php


Título: Re: problemas con Arrays PHP
Publicado por: Dreamcacher en 8 Diciembre 2010, 03:02 am
Código:
$i++;

Con esto que esta al final de while, hace que la primera vez, no entre y lo asigne, y luego a partir de ahi, 0 sera inferior a, cuando el while ya se ha ejcutado la primera vez, y hara el for comprobando  1, por lo que entrara y comprobara el array para los huecos ($i - 1)... que no seria del tod correcto pero si fucionaria...


Título: Re: problemas con Arrays PHP
Publicado por: Dreamcacher en 8 Diciembre 2010, 03:04 am
de hecho para estar perfecto, seria una cosa asi...

Código:
<?php

$resultado=mysql_query('select categoria from noticias', $conexion);

$arrayCat2=array();
$i=0;
$r=0;

while($arrayCat=mysql_fetch_array($resultado))
{
for ($i2=0; $i2<$i; $i2++)
{
if ($arrayCat2[$i2] == $arrayCat['categoria'])
{
$r=1;
break;
}
}

if ($r == 0)
{
$arrayCat2[$i] = $arrayCat['categoria'];
$i++;
}
}

foreach ($arrayCat2 as $categoria)
{
echo' <p>
    '.$categoria.'
    </p>';
}
?>


asi cada vez que alarga el array, el contador del indice sube y luego cuando vuelva a iniciar el while entrara en el for, y lo repetira tantas veces como asignaciones haya hecho y no como respuestas tenga de la base de datos como era antes...


Título: Re: problemas con Arrays PHP
Publicado por: cassiani en 8 Diciembre 2010, 06:39 am
si vale no vi el contador al final u.u''

Lo que no logro entender es que es lo que quieres hacer.. mostrar las categorías sin repetirlas?

fíjate que cuando la variable $r toma la primera vez el valor 1 no lo pierde mas nunca, si los primeros dos resultados de la consulta son iguales, entonces solo te mostrara la primera categoría y las demás no, tendrías que reiniciar esa variable al comienzo del while; de igual forma puedes hacer lo mismo de esta manera:

1.-
Código
  1. $resultado = mysql_query('select categoria from noticias', $conex);
  2. $arrayCat2 = array();
  3. while($arrayCat=mysql_fetch_array($resultado))
  4. {
  5. if (!in_array($arrayCat['categoria'],$arrayCat2))
  6. $arrayCat2[] = $arrayCat['categoria'];
  7. }
  8. foreach ($arrayCat2 as $categoria)
  9. echo '<p>',$categoria,'</p>';

2.-
Código
  1. $resultado = mysql_query('select distinct categoria from noticias', $conex);
  2. while($arrayCat=mysql_fetch_array($resultado))
  3. echo $arrayCat['categoria'],'<br/>';
  4.  

Eso es lo que entiendo quieres hacer, si no es así deja más detalles ;)


Título: Re: problemas con Arrays PHP
Publicado por: Dreamcacher en 8 Diciembre 2010, 22:33 pm
vale, no me fije en lo de la $r, con eso arreglado ya me ha funcionado perfecto ^^

me interesan estos metodos, yo estaba mas familiarizado con el otro porque es el qu uso en clase, con el segundo unicamente selecciona los que son diferentes, no?

pero el primero, que hace?


Título: Re: problemas con Arrays PHP
Publicado por: cassiani en 9 Diciembre 2010, 01:10 am
1. El primero lo que hace es comparar si el dato arrojado por la consulta se encuentra en el array, si no es así lo asigna, de manera que si ya se agrego X categoría solo se mostrara una vez así este repetida en la tabla Noticias.
Eso lo hace usando la función in_array
Código:
http://ve2.php.net/in_array

2.- En el segundo se usa la instrucción DISTINCT en la consulta SQL para mostrar registros NO duplicados, lo demás es imprimir el resultado.
Código:
http://dev.mysql.com

saludos!


Título: Re: problemas con Arrays PHP
Publicado por: Dreamcacher en 9 Diciembre 2010, 10:16 am
ok, muchas gracias!! ^^ la verdad que es un codigo mas sencillo ^^