Foros del Web » Programando para Internet » PHP »

Problema con foreach y array externo

Estas en el tema de Problema con foreach y array externo en el foro de PHP en Foros del Web. Muy buenas, estoy haciendo una pequeña aplicación para hacer pedidos desde PDAs, y me he topado con un problema que no entiendo en absoluto. Hay ...
  #1 (permalink)  
Antiguo 22/04/2009, 05:24
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Problema con foreach y array externo

Muy buenas,

estoy haciendo una pequeña aplicación para hacer pedidos desde PDAs, y me he topado con un problema que no entiendo en absoluto.

Hay un formulario donde los datos llegan de la siguiente manera:
1-05
1/2-802
2-8100

A ésta cadena (son varias líneas, pero solamente una cadena) la llamo $pedido.

El formato de cada línea es Cajas-Referencia. Cajas es el número de cajas (1/2 es media caja) y Referencia es el código del producto.

Bien. Ahora, tengo un array así:

Código php:
Ver original
  1. $producto["05"]="una referencia";
  2. $producto["802"]="una más";
  3. $producto["8100"]="otra referencia";

Está el código de referencia del producto con su nombre.

Luego tengo un foreach, que trabaja con un array creado a partir de $pedido.

Código php:
Ver original
  1. $pedido = explode("\n",$pedido);
  2.  
  3. foreach ($pedido as $var) {
  4.     $linea = explode("-",$var);
  5.     if($linea[0]=="1/2") $cantidad = "½";
  6.     elseif($linea[0]=="1/3") $cantidad = "⅓";
  7.     elseif($linea[0]=="2/3") $cantidad = "⅔";
  8.     else $cantidad = $linea[0];
  9.     echo $cantidad." ".$producto[$linea[1]]."<br />";
  10. }

Lo curioso es que la cantidad funciona perfectamente, pero no así el nombre del producto ($producto[$linea[1]]). Solamente la última posición del pedido si que saca el nombre. Muy raro. He probado hasta hacer al final del bucle un unset a $linea[1] y cosas así muy extrañas, pero nada...

En el ejemplo anterior, lo que imprimiría sería:

1
½
2 otra referencia

¿Ustedes ven algo raro? Porque yo llevo ya un buen rato y no hay manera...

Gracias y un saludo.
  #2 (permalink)  
Antiguo 22/04/2009, 06:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con foreach y array externo

yo veo bien el código....

tal ves necesites usar trim($linea[1]) ya que puede haber espacios invisibles...

o bien, imprime..
Código PHP:
echo "'$linea[1]'"
y verifica los posibles, espacios.... suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 22/04/2009, 06:31
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Gracias pateketrueke.

Con trim() se soluciona. Espacios no eran seguro. Imagino que algún \r o alguna cosilla así. Buff... Por eso también la última línea siempre salía bien.

Bueno, tenía que haber dicho que funciona en Firefox. En Safari no va (es para un iPhone la aplicación).

Sé que entre IE y FF hay diferencias de cómo envían las líneas nuevas y retornos de carro.

¿Hay alguna manera de imprimir una variable tal cual, con sus \n \r \t y demás?

Última edición por GatorV; 22/04/2009 a las 21:09
  #4 (permalink)  
Antiguo 22/04/2009, 06:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con foreach y array externo

creo que son caracteres invisibles....

aún así, intenta esto... en lugar de explode()

Código PHP:
$pedido preg_split("/\r|\n|\r\n|\t/"trim($pedido)); 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 22/04/2009, 17:34
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Respuesta: Problema con foreach y array externo

Ahora si que si.

Imagino ahora, que la única forma de saber que están ahí sería reemplazarlos por cualquier otra cosa.

En cualquier caso, muchísimas gracias.
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 15:18.