problemas con Arrays PHP

Iniciado por Dreamcacher, 8 Diciembre 2010, 02:05 AM

0 Miembros y 1 Visitante están viendo este tema.

Dreamcacher

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...


<?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>'
;
}
?>


http://galeria.dreamcachersite.es/

...En este mundo existen tres tipos de personas, las que saben contar, y las que no...
[ Homer Simpsion ]

cassiani

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


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.
http://php.net/manual/es/function.count.php

Dreamcacher


$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...


http://galeria.dreamcachersite.es/

...En este mundo existen tres tipos de personas, las que saben contar, y las que no...
[ Homer Simpsion ]

Dreamcacher

de hecho para estar perfecto, seria una cosa asi...

<?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...


http://galeria.dreamcachersite.es/

...En este mundo existen tres tipos de personas, las que saben contar, y las que no...
[ Homer Simpsion ]

cassiani

#4
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 (php) [Seleccionar]
$resultado = mysql_query('select categoria from noticias', $conex);
$arrayCat2 = array();
while($arrayCat=mysql_fetch_array($resultado))
{
if (!in_array($arrayCat['categoria'],$arrayCat2))
$arrayCat2[] = $arrayCat['categoria'];
}
foreach ($arrayCat2 as $categoria)
echo '<p>',$categoria,'</p>';


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


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

Dreamcacher

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?


http://galeria.dreamcachersite.es/

...En este mundo existen tres tipos de personas, las que saben contar, y las que no...
[ Homer Simpsion ]

cassiani

#6
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
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.
http://dev.mysql.com

saludos!

Dreamcacher

ok, muchas gracias!! ^^ la verdad que es un codigo mas sencillo ^^


http://galeria.dreamcachersite.es/

...En este mundo existen tres tipos de personas, las que saben contar, y las que no...
[ Homer Simpsion ]