Foros del Web » Programando para Internet » PHP »

Es imposible...

Estas en el tema de Es imposible... en el foro de PHP en Foros del Web. Hola, si yo tengo el siguiente array: $juegos= array ("Star Wars|25 dolares|Muy bueno|", "Battlefield|30 dolares|Muy bueno|", "Tony Hawk's|40 dolares|Muy bueno|"); En ese array el caracter ...
  #1 (permalink)  
Antiguo 08/07/2005, 20:13
 
Fecha de Ingreso: febrero-2004
Mensajes: 138
Antigüedad: 13 años, 9 meses
Puntos: 2
Exclamación Es imposible...

Hola, si yo tengo el siguiente array:
$juegos= array
("Star Wars|25 dolares|Muy bueno|",
"Battlefield|30 dolares|Muy bueno|",
"Tony Hawk's|40 dolares|Muy bueno|");
En ese array el caracter "|", es el separador.

Como puedo hacer para que se ordenen, por ejemplo, por el precio (o sea, el segundo dato del array).

Para mi es imposible, el que lo sepa hacer es un genio.
  #2 (permalink)  
Antiguo 08/07/2005, 21:18
 
Fecha de Ingreso: enero-2005
Ubicación: Salta - Argentina
Mensajes: 321
Antigüedad: 12 años, 11 meses
Puntos: 7
sólo aclarame una cosilla:
lo que quieres es que se ordenen y los valores del array queden ordenados o sólo quieres ordenarlos para imprimirlo en pantalla?
__________________
Netyco.com.ar
Diseño Web, Hosting y transmisión de radio On-Line
NUEVO! Planes para revendedores / reselellers
Web: http://www.netyco.com.ar
  #3 (permalink)  
Antiguo 08/07/2005, 21:24
 
Fecha de Ingreso: febrero-2004
Mensajes: 138
Antigüedad: 13 años, 9 meses
Puntos: 2
Respondiendo...

Cita:
Iniciado por Netyco
sólo aclarame una cosilla:
lo que quieres es que se ordenen y los valores del array queden ordenados o sólo quieres ordenarlos para imprimirlo en pantalla?
Quiero que se ordenen para poder imprimirlos en la pantalla.

Si lo logras estare eternamente agradecido.
  #4 (permalink)  
Antiguo 08/07/2005, 23:47
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 12 años, 6 meses
Puntos: 2
Bueno, estube aburrido y te confieso me mantubo 45 minutos ocupados . El que la fuente sea un array como el que pusiste trajo algunas complicaciones, pero lo pude resolver. Si de fuente tienes un string habria que hacer algunas modificaciones. Te explico rapidamente que fue lo que hice: Primero tube que formar un string a partir del array "original", a este string lo tube que volver a separar para tener cada dato separado adecuadamente en un array, despues cada dato lo tube que ordenar en un array diferente, apartir de aqui creo que el script se explica solo .
Código PHP:
<?php

// El array da algunos problemas ya que cada elemento termina con | sino fuera asi no habri ningun inconveniente
$juegos= array("Star Wars|25 dolares|Muy bueno|","Battlefield|30 dolares|Muy bueno|","Tony Hawk's|40 dolares|Muy bueno|");

// Formo una cadena
$cadena implode("",$juegos);

// Separo cada dato para ordenarlos en array's diferentes
$juegos_separados explode("|",$cadena);

// Los ordeno en array's diferentes
for($i 0;$i count($juegos_separados);$i += 3)
{
        
$game[] = $juegos_separados[$i];
        
$precio[] = $juegos_separados[$i+1];
        
$rank[] = $juegos_separados[$i+2];
}

// Ordeno el array podria ser asort() o arsort(), de menor a mayor y de mayor a menor respectivamente
arsort($precio);

// Declaro la variable para usarlo en el while, podria ser un for tambien
// pero sino se repite se obtiene practica ;-) ...
$i 0;

// El count() - 1 es porque en el array original se cola un elemento de mas por el signo |
while($i count($game) - 1)
{
        
$K key($precio);

        echo 
$game[$K]."-".current($precio)."-".$rank[$K]."<br>";

        
$i++;
        
next($precio);
}

?>
Me dio varios problemas el que los elementos terminen con " | ", y tube que recurrir a algunos "parches" .Esta comentado todo para que se entienda, perdona que no pude explicarlo ni desarrollarlo mejor pero ya es tarde y tengo que dormir . Saludos, espero que te sirva cualquier duda pregunta que tratare de mejorarlo un poco.
  #5 (permalink)  
Antiguo 09/07/2005, 01:39
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Otra forma sería:
- Convertir el array
$juegos = array("Star Wars|25 dolares|Muy bueno|", "Battlefield|30 dolares|Muy bueno|", "Tony Hawk's|40 dolares|Muy bueno|");
- Y dejarlo de la forma:
$nuevo_array["Star Wars|Muy bueno"] = "25 dolares";
$nuevo_array["Battlefield|Muy bueno"] = "30 dolares";
$nuevo_array["Tony Hawk's|Muy bueno"] = "40 dolares";

Así sería más fácil de ordenar por el precio.
Luego, simplemente ordenas ese array, y lo recorres para imprimirlo.
Código PHP:
$juegos = array("Star Wars|25 dolares|Muy bueno|""Battlefield|30 dolares|Muy bueno|""Tony Hawk's|40 dolares|Muy bueno|");

foreach(
$juegos as $valor){
    
$registro explode("|"$valor);
    
$nuevo_array[$registro[0]."|".$registro[2]] = $registro[1]; // Esto generará un array con la siguiente estructura $nuevo_array["Titulo|Comentario"] = precio;
}

asort($nuevo_array);// Ordenamos el nuevo array por precio

foreach($nuevo_array as $clave => $valor){ // Recorremos array ordenado
    
$registro explode("|"$clave); // $registro[0] será el título, $registro[1] el comentario
    
echo "Título: ".$registro[0]."<br />Precio: ".$valor."<br />Comentario: ".$registro[1]."<br /><hr />";

Seguramente existirá alguna manera más sencilla, así que sigue investigando.

Saludos
  #6 (permalink)  
Antiguo 09/07/2005, 09:44
 
Fecha de Ingreso: febrero-2004
Mensajes: 138
Antigüedad: 13 años, 9 meses
Puntos: 2
De acuerdo Gracias

Muchas gracias a todos.

Solo una cosa:

Alguien me podria explicar con un ejemplo la funcion implode() y el bucle "froeach"?

Saludos
  #7 (permalink)  
Antiguo 09/07/2005, 12:20
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 12 años, 6 meses
Puntos: 2
Hola, como veo Jpinedo lo hizo de otra forma y mas simple ...

Implode: Se encarga de concatenar cada elemento de un array en un string, uno de los parametros es el simbolo que quieres que actue de separador en cada elemento. Talvez lo entiendas mejor si lo lees del manual AQUI

foreach: Es una función para recorrer array's, este devuelve un par clave, valor (como la función each).
http://ar.php.net/manual/es/control-...es.foreach.php
  #8 (permalink)  
Antiguo 09/07/2005, 12:57
 
Fecha de Ingreso: febrero-2004
Mensajes: 138
Antigüedad: 13 años, 9 meses
Puntos: 2
De acuerdo Y si...

Y si en vez de definir el array yo quisiera que se buscara dentro de un fichero:

En vez de $juegos= array(.....);

Seria

$juegos= file("fichero.txt");

Si es posible con el bucle for.

  #9 (permalink)  
Antiguo 09/07/2005, 13:22
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
fichero.txt debería tener una estructura definida. Por ejemplo:
fichero.txt
Código:
Star Wars|25 dolares|Muy bueno|
Battlefield|30 dolares|Muy bueno|
Tony Hawk's|40 dolares|Muy bueno|
Si luego haces:
$juegos= file("fichero.txt");

Estarás en la misma situación que planteaste al principio.

Saludos
  #10 (permalink)  
Antiguo 09/07/2005, 16:44
 
Fecha de Ingreso: febrero-2004
Mensajes: 138
Antigüedad: 13 años, 9 meses
Puntos: 2
Si, pero necesito que se haga con un bucle for, y que la primera linea del fichero no se muestre.

Ya habia probado eso, y funciono, pero no se como hacer el bucle for.
  #11 (permalink)  
Antiguo 09/07/2005, 17:29
 
Fecha de Ingreso: febrero-2004
Mensajes: 138
Antigüedad: 13 años, 9 meses
Puntos: 2
Sonrisa Ya me funciona.... ¡Gracias a todos!

Este es el codigo que use, y me funcionó:

Código PHP:
<?php

$juegos 
file("juegos.txt");

for (
$i=1;$i<count($juegos);$i++){
    
$registro explode("|"$juegos[$i]);
    
$juego[$i]= $registro[0];
    
$precio[$i]= $registro[1];
    
$comentario[$i]= $registro[2];
}

asort($juego);

for (
$j=1;$j<count($juegos);$j++){
$kkey($juego);
$juego_actualcurrent($juego);
echo 
"Juego: $juego_actual, vale $precio[$k], y su comentario es:<br>$comentario[$k]<hr><br>";
next ($juego);
}

?>
Este es el codigo de juegos.txt:

Código PHP:
Esta es la linea que no quiero que se muestre
Star wars
|45 dolar|Muy bueno|
Battlefield|6 dolares|Malisimo|
Tony hawks|100 dolares|Bastante bien
Lo que hice fue ordenar los juegos en modo alfabetico

Muxisimas gracias a todos, si necesitan ayuda en algo de PHP me contactan por messenger:
[email protected]
A ver si puedo devolverles el favor.

¡Gracias!

Saludos
  #12 (permalink)  
Antiguo 09/07/2005, 19:30
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Bueno... de todas maneras, para recorrer arrays es más claro hacerlo con el bucle foreach en lugar del for con la función count(). Además en el segundo bucle te ahorrará el uso de la función key(), current() y next()
Código PHP:
<?php

$juegos 
file("juegos.txt");

foreach(
$juegos as $jue){
    
$registro explode("|"$jue);
    
$juego[]= $registro[0];
    
$precio[]= $registro[1];
    
$comentario[]= $registro[2];
}

asort($juego);

foreach(
$juego as $k=>$juego_actual){
   echo 
"Juego: $juego_actual, vale $precio[$k], y su comentario es: <br>$comentario[$k]<hr><br>";
}

?>
Saludos
  #13 (permalink)  
Antiguo 09/07/2005, 19:54
 
Fecha de Ingreso: febrero-2004
Mensajes: 138
Antigüedad: 13 años, 9 meses
Puntos: 2
Cita:
Iniciado por jpinedo
Bueno... de todas maneras, para recorrer arrays es más claro hacerlo con el bucle foreach en lugar del for con la función count(). Además en el segundo bucle te ahorrará el uso de la función key(), current() y next()
Código PHP:
<?php

$juegos 
file("juegos.txt");

foreach(
$juegos as $jue){
    
$registro explode("|"$jue);
    
$juego[]= $registro[0];
    
$precio[]= $registro[1];
    
$comentario[]= $registro[2];
}

asort($juego);

foreach(
$juego as $k=>$juego_actual){
   echo 
"Juego: $juego_actual, vale $precio[$k], y su comentario es: <br>$comentario[$k]<hr><br>";
}

?>
Saludos
El problema es que necesito que la primera linea no se muestre

__________________
De mucho estudiar nadie se murió, pero mas vale no arriesgarse
  #14 (permalink)  
Antiguo 09/07/2005, 21:17
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
En ese caso quitas el primer elemento del array:
Código PHP:
$juegos file("juegos.txt");
array_shift($juegos);

foreach(
$juegos as $jue){ 
//...
//... 
Saludos
  #15 (permalink)  
Antiguo 09/07/2005, 21:39
 
Fecha de Ingreso: febrero-2004
Mensajes: 138
Antigüedad: 13 años, 9 meses
Puntos: 2
Cita:
Iniciado por jpinedo
En ese caso quitas el primer elemento del array:
Código PHP:
$juegos file("juegos.txt");
array_shift($juegos);

foreach(
$juegos as $jue){ 
//...
//... 
Saludos
Pareces tener respuestas para todo,

¡Gracias!
__________________
De mucho estudiar nadie se murió, pero mas vale no arriesgarse
  #16 (permalink)  
Antiguo 11/07/2005, 00:09
 
Fecha de Ingreso: febrero-2004
Mensajes: 138
Antigüedad: 13 años, 9 meses
Puntos: 2
¿Existe algun limite maximo de numeros de un array?
Código PHP:
$array[]= "Valor"
O sea, existe algun limite de numeros para el valor que va entre corchetes?



__________________
De mucho estudiar nadie se murió, pero mas vale no arriesgarse
  #17 (permalink)  
Antiguo 11/07/2005, 00:55
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Habría sido bueno que hagas esta pregunta en un tema aparte.

Una matriz puede aceptar como índice una cadena o un entero.
El mayor índice entero que puede tomar una matriz está definido por el máximo número entero que soporte PHP. Cito lo que dice el amnual respecto al tamaño de una entero
Cita:
Iniciado por manual oficial
El tamaño de un entero es dependiente de la plataforma, aunque un valor máximo de aproximadamente dos billones es el valor usual (lo que es un valor de 32 bits con signo). PHP no soporta enteros sin signo.
Puedes leer sobre enteros en el manual:
http://www.php.net/language.types.integer

Hice pruebas en mi PC y obtuve este número entero máximo 2147483647. Si se pone 2147483648, la cuenta se inicia desde -2147483648.

Ahora, si hablamos de índices tipo "string" el tema es análogo. La cadena que se ponga como índice en un array tendrá como máximo el mismo límite que para una variable de tipo String en PHP. Al respecto el manual dice:
Cita:
Iniciado por manual oficial
Nota: El que una cadena se haga muy grande no es un problema. PHP no impone límite práctico alguno sobre el tamaño de las cadenas, así que no hay ninguna razón para preocuparse sobre las cadenas largas.
Todo sobre cadenas en PHP:
http://www.php.net/language.types.string

Saludos
  #18 (permalink)  
Antiguo 11/07/2005, 12:37
 
Fecha de Ingreso: febrero-2004
Mensajes: 138
Antigüedad: 13 años, 9 meses
Puntos: 2
Ayuda!!!! No se que funciona mal

Hola, me recuerdan ?

Bueno, ahora, quiero que los resultados se paginen (se ordenen por paginas, pero en el orden alfabetico)

Tengo el siguiente codigo:
Código PHP:
<?
$limite
2;
$file= array ("Battlefield|<|1|<|",
"Tony Hawk's|<|2|<|",
"The Sims|<|3|<|",
"Star wars|<|0|<|");
$totalcount($file);
$pag= @$_GET["pag"];
if (empty(
$pag)){
$paginaactual1;
}else{
$paginaactual$pag;
}
$desde$paginaactual*$limite-$limite;
$hasta$paginaactual*$limite;
for (
$i=$desde;$i<$total;$i++){
$dato= @explode("|<|"$file[$i]);
$juego[$i]= $dato[0];
$id[$i]= $dato[1];
}
asort ($juego);
for (
$j=$desde;$j<$total and $j<$hasta;$j++){
$Kkey($juego);
$actualcurrent($juego);
echo 
"El juego actual es $actual, y su ID es $id[$K].<br><br>";
next ($juego);
}

//PAGINAS
if ($total>$limite){
$paginasceil($total/$limite);
for (
$i=1;$i<=$paginas;$i++){
if (
$i==$paginaactual){
echo 
"<b>$i</b> ";
}else{
echo 
"<a href=?pag=$i>$i</a> ";
}
}
}
?>
Copienlo y peguenlo, van a notar que Star Wars aparece en las dos paginas, como puedo hacer??
Ayuda!!!!!!!!!!!!!

__________________
De mucho estudiar nadie se murió, pero mas vale no arriesgarse
  #19 (permalink)  
Antiguo 11/07/2005, 12:53
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 13 años, 9 meses
Puntos: 0
wow, he de confesar que explode e implode me descolocan...
probaré mas con ellas
  #20 (permalink)  
Antiguo 11/07/2005, 14:08
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
alejoluc:
Ahora sí es buena idea que repitas tu pregunta en un tema aparte.
ES por una cuestión de orden y sobretodo para que otros puedan ayudarte mejor si le pones un título como "Paginar un array".

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

SíEste tema le ha gustado a 1 personas




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