Comunidad de diseño web y desarrollo en internet online

array complicado

Citar            
MensajeEscrito el 01 Jun 2010 07:56 am
Hola a todos. Estoy empezando con el PHP y la verdad, me doy cuenta de que todavía tengo que aprender mucho, así que os cuento mis desgracias y a ver si podeis ayudarme.
Tengo tres cadenas de números separadas por comas:
23,45,64,76,54,23,76,89,76,59

1,1,1,1,34,56,1,67,1,45

23,45,65,78,99,23,76,89



El primero y el segundo siempre tienen el mismo numero de elementos y están guardados en un campo de una base de datos. además están realacionados entre ellos así al primer elemento de uno, le corresponde el primero de otro, al segundo, el segundo...(23,1), (45,1), (64,1)...(59,45)
Lo que trato de hacer es lo siguiente, recibiendo la tercera cadena tengo que crear otra cadena que actualice la cadena dos.
Es decir, ver que numeros han cambiado entre la tres y la uno, si no ha cambiado se mantiene el valor el la cadena 2 y si ha añadido se inserta un 1 (el 23 tendría el mismo valor, el 45 tambien...el 78 que no estaba debería insertar un 1)

Se me ocurrió hacer un explode a los tres array y comparar los valores de primero y tercero e ir creando una nueva variable con los valores para el segundo.
Resulta que con mi código se insertan 1 por todos los lados en el momento en que encuentra una "no copincidencia".
La teoría es fácil... la práctica es bastante más dificil
Os dejo el código que tengo y gracias a todos por la ayuda

Código PHP :

$tar="1,1,1,1,34,56,1,67,1,45";// cadena 2
$caracAnteriores="23,45,65,78,99,23,76,89";// cadena 1 
$comp= "23,45,65,78,99,23,76,89";// cadena nueva

if(count($tar)>count($comp)){// busco cual es mas larga
$mayor=count($tar);
   }else{
$mayor=count($comp);
}
for($i=0; $i<$mayor; $i++){
   if($comp[$i]==$caracAnteriores[$i]){
      $resultado.=",".$tar[$i];// si es igual uno el valor anterior
   }else{
      $resultado.=",1"; // si no es igual pongo un uno
      for($j=$i; $j<$mayor; $j++){// miro las siguientes
         if($comp[$i]==$caracAnteriores[$j]){
         $resultado.=",".$tar[$j];// si coincide pongo su valor anterior
     }
  }
}
}
echo $resultado;

Por pennyjou

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2010 04:33 pm
Solucionado

Código PHP :

$car=explode(",", "0,2,3,4,5");// cadena 1 anterior
$tar=explode(",", "a,b,c,d,e");// cadena tres de valores
$comp= explode(",", "1,2,6,7,8,9");// cadena nueva
if(count($tar)>count($comp)){// busco cual es mas larga
$mayor=count($tar);
   }else{
$mayor=count($comp);
}
for($i=0; $i<$mayor; $i++) {
    // Para simplificar la comparacion llenas los campos vacios
    if(!isset($comp[$i]))
        $comp[$i] = 1;
    if(!isset($car[$i]))
        $car[$i] = 1;
    // Buscas el elemento, independientemente de en que posicion se encuentre:
    if( in_array($comp[$i], $car) ) {
        $resultado.=",".$tar[$i];// si existe, se guarda el valor de esta posicion
    } else {
        $resultado .= ',1'; //concatenar
    }
}
echo $resultado;

Por pennyjou

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2010 05:14 pm
pregunta: ¿para que es todo esto? ¿que es lo que quieres resolver con este script?

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.