Foros del Web » Programando para Internet » PHP »

Problema con arrays

Estas en el tema de Problema con arrays en el foro de PHP en Foros del Web. Hola foreros, A ver si alguien me puede echar una mano con una peleita que tengo con los arrays. El objetivo del código es recorrer ...
  #1 (permalink)  
Antiguo 28/06/2011, 11:43
Avatar de damargon  
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 386
Antigüedad: 20 años, 10 meses
Puntos: 3
Problema con arrays

Hola foreros,

A ver si alguien me puede echar una mano con una peleita que tengo con los arrays.

El objetivo del código es recorrer un array y que una función se ejecute cuando encuentra un valor concreto. Una vez repasado el array necesito volver a empaquetar dicho array con esos nuevos valores.
El primero proceso (recorrer el array) no hay problema.

El array que traigo empaquetado es $arrayViejo que viene de una consulta mysql que devuelve 20 campos

Código PHP:
       for ($row 0$row count($arrayViejo0); $row++) {
          
          foreach (
$arrayViejo[$row] as $key => $value) {
                
                if(
eregi("2011",$value)){
                  
$value str_replace("2011","",$value);
                }
            
            
$nuevoarray[] = array_merge(array($key=>$value));
            
            
          }
       } 
El problema lo tengo en la creación del $nuevoarray que me cree una estructura similar a la del $arrayviejo pero no lo consigo.

Agradecería cualquier ayuda.

Muchas gracias
  #2 (permalink)  
Antiguo 28/06/2011, 11:53
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Problema con arrays

Ahí te paso un ejemplo simple:

Código PHP:
Ver original
  1. <?php
  2. $arrayViejo = array(0 => 2, 1 =>  "a", 2 => 2000, 3 => 2011, 4 => "x", 5 =>  "c", 6 =>  22, 7 =>  true, 8 => "+");
  3. $nuevoarray = array();
  4. echo "<h5>Array viejo:</h5>";
  5. print_r($arrayViejo);
  6. $i = 0;
  7. foreach ($arrayViejo as $key => $value) {
  8.     if(eregi("2011",$value))$value = str_replace("2011","KK!",$value);
  9.     $nuevoarray[$key] = $value;
  10.     $i++;
  11. }
  12.  
  13. echo "<h5>Nuevo:</h5>";
  14. print_r($nuevoarray);
  15. ?>

Salu2!
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 28/06/2011, 12:11
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Problema con arrays

probá asi:
Código PHP:
Ver original
  1. $nuevoarray = array();
  2. for ($row = 0; $row < count($arrayViejo); $row++) {
  3.     if(strstr($arrayViejo[$row],"2011"))
  4.     {
  5.         $nuevoarray[] = str_replace("2011","",$arrayViejo[$row]);
  6.     }
  7. }
__________________
la la la
  #4 (permalink)  
Antiguo 28/06/2011, 13:55
Avatar de damargon  
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 386
Antigüedad: 20 años, 10 meses
Puntos: 3
Respuesta: Problema con arrays

Cita:
Iniciado por repara2 Ver Mensaje
Ahí te paso un ejemplo simple:

Código PHP:
Ver original
  1. <?php
  2. $arrayViejo = array(0 => 2, 1 =>  "a", 2 => 2000, 3 => 2011, 4 => "x", 5 =>  "c", 6 =>  22, 7 =>  true, 8 => "+");
  3. $nuevoarray = array();
  4. echo "<h5>Array viejo:</h5>";
  5. print_r($arrayViejo);
  6. $i = 0;
  7. foreach ($arrayViejo as $key => $value) {
  8.     if(eregi("2011",$value))$value = str_replace("2011","KK!",$value);
  9.     $nuevoarray[$key] = $value;
  10.     $i++;
  11. }
  12.  
  13. echo "<h5>Nuevo:</h5>";
  14. print_r($nuevoarray);
  15. ?>

Salu2!
Muchas gracias, la linea "$nuevoarray[$key] = $value;" me ha resuelto el problema pero ahora me surge otro nuevo: el eregi que busca el 2011 no funciona bien, no sustituye nada, ¿será porque son arrays?
  #5 (permalink)  
Antiguo 28/06/2011, 14:55
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Problema con arrays

probá mi codigo por favor
__________________
la la la
  #6 (permalink)  
Antiguo 28/06/2011, 15:12
Avatar de damargon  
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 386
Antigüedad: 20 años, 10 meses
Puntos: 3
Respuesta: Problema con arrays

Hola truman, tu código funciona perfectamente en la extracción de los valores del array pero la función strstr no encuentra nunca el "2011" a pesar de que hay valores que contienen valores de fechas traidos de la base de datos del tipo "2011-11-10", por lo que devuelve un array vacío.

El asunto es que entre todos los valores busque los que contienen la cadena "2001" y elimine solo esa parte del valor, añada el valor modificado y continúe formando el nuevo array con los datos.

Muchas gracias por tu ayuda.
  #7 (permalink)  
Antiguo 29/06/2011, 00:11
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Problema con arrays

En mi server funciona perfectamente, comprueba el tipo y el valor de $value, por ahi viene tu problema. Salu2!
__________________
Fere libenter homines, id quod volunt, credunt.
  #8 (permalink)  
Antiguo 29/06/2011, 01:06
Avatar de damargon  
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 386
Antigüedad: 20 años, 10 meses
Puntos: 3
Respuesta: Problema con arrays

Cita:
Iniciado por repara2 Ver Mensaje
En mi server funciona perfectamente, comprueba el tipo y el valor de $value, por ahi viene tu problema. Salu2!
Repara2, tu array es de este tipo:
Código PHP:
Array
(
    [
0] => 2
    
[1] => a
    
[2] => 2000
    
[3] => 2011
    
[4] => x
    
[5] => c
    
[6] => 22
    
[7] => 1
    
[8] => +

Pero el que manejo yo tiene esta estructura, quizás por eso no funciona el str_replace:
Código PHP:
Array
(
    [
0] => Array
        (
            [
id] => 1
            
[name] => nombre1
            
[date] => 2011-06-25
            
[status] => open
        
)

    [
1] => Array
        (
            [
id] => 2
            
[name] => nombre2
            
[date] => 2011-07-27
            
[status] => open
        
)

    [
2] => Array
        (
            [
id] => 3
            
[name] => nombre3
            
[date] => 2011-06-27
            
[status] => open
         
)

¡Muchas gracias!
  #9 (permalink)  
Antiguo 29/06/2011, 02:08
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Problema con arrays

damargon, a ver si estudiamos un poco, ahí va el ejemplo:

Código PHP:
Ver original
  1. <?php
  2.  
  3. ini_set("display_errors", 1);
  4.  
  5. $arrayViejo = Array
  6. (
  7. 0 => Array
  8. (
  9.             "id" => 1,
  10.             "name" => "nombre1",
  11.             "date" => "2011-06-25",
  12.             "status" => "open",
  13. ),
  14.  
  15. 1 => Array
  16. (
  17.             "id" => 2,
  18.             "name" => "nombre2",
  19.             "date" => "2010-07-27",
  20.             "status" => "open",
  21. ),
  22.  
  23. 2 => Array
  24. (
  25.             "id" => 3,
  26.             "name" => "nombre3",
  27.             "date" => "2011-06-27",
  28.             "status" => "open",
  29. ),
  30. );
  31.  
  32. $nuevoarray = array();
  33. echo "<pre><h5>Array viejo:</h5>";
  34. print_r($arrayViejo);
  35.  
  36. foreach ($arrayViejo as $key => $array) {
  37.     foreach ($array as $k => $value){
  38.  
  39.         if($k == "date" && strstr($value, "2011")) $value = str_replace("2011","KK!",$value);
  40.         $nuevoarray[$key][$k] = $value;
  41.     }
  42.  
  43. }
  44.  
  45. echo "<h5>Nuevo:</h5>";
  46. print_r($nuevoarray);
  47. echo "</pre>";
  48.  
  49. ?>
__________________
Fere libenter homines, id quod volunt, credunt.
  #10 (permalink)  
Antiguo 30/06/2011, 06:01
Avatar de damargon  
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 386
Antigüedad: 20 años, 10 meses
Puntos: 3
Respuesta: Problema con arrays

Cita:
Iniciado por repara2 Ver Mensaje
damargon, a ver si estudiamos un poco, ahí va el ejemplo:

Código PHP:
Ver original
  1. <?php
  2.  
  3. ini_set("display_errors", 1);
  4.  
  5. $arrayViejo = Array
  6. (
  7. 0 => Array
  8. (
  9.             "id" => 1,
  10.             "name" => "nombre1",
  11.             "date" => "2011-06-25",
  12.             "status" => "open",
  13. ),
  14.  
  15. 1 => Array
  16. (
  17.             "id" => 2,
  18.             "name" => "nombre2",
  19.             "date" => "2010-07-27",
  20.             "status" => "open",
  21. ),
  22.  
  23. 2 => Array
  24. (
  25.             "id" => 3,
  26.             "name" => "nombre3",
  27.             "date" => "2011-06-27",
  28.             "status" => "open",
  29. ),
  30. );
  31.  
  32. $nuevoarray = array();
  33. echo "<pre><h5>Array viejo:</h5>";
  34. print_r($arrayViejo);
  35.  
  36. foreach ($arrayViejo as $key => $array) {
  37.     foreach ($array as $k => $value){
  38.  
  39.         if($k == "date" && strstr($value, "2011")) $value = str_replace("2011","KK!",$value);
  40.         $nuevoarray[$key][$k] = $value;
  41.     }
  42.  
  43. }
  44.  
  45. echo "<h5>Nuevo:</h5>";
  46. print_r($nuevoarray);
  47. echo "</pre>";
  48.  
  49. ?>
Tienes toda la razón Repara2, tengo que estudiar más pero cuando el tema se te encasquilla (hice muchas pruebas y no conseguía dar con ello) y no tienes mucho tiempo por la presión que te meten los clientes lo mejor es recurrir al foro en donde expertos como tú le salvan la vida a paletos como yo,

Muchísimas gracias, me has salvado el pellejo.
  #11 (permalink)  
Antiguo 30/06/2011, 06:07
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Problema con arrays

Lo entiendo perfectamente, es lo que estamos comentado en http://www.forosdelweb.com/f18/cada-...r-foro-925387/. Cuando las cosas se ponen feas hay que tirar de donde sea. Pásate por allí, seguro que aportas algo, salu-2!
__________________
Fere libenter homines, id quod volunt, credunt.

Etiquetas: arrays
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 18:51.