Foros del Web » Programando para Internet » PHP »

Obtener cadena diferente en array

Estas en el tema de Obtener cadena diferente en array en el foro de PHP en Foros del Web. Hola amigos, tengo un pequeño problema que me rompe la cabeza, tengo un array: $data = array(0 => 'AAAA' , 1 => 'F0AAAA' , 2 ...
  #1 (permalink)  
Antiguo 30/05/2011, 12:34
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Pregunta Obtener cadena diferente en array

Hola amigos, tengo un pequeño problema que me rompe la cabeza, tengo un array:

$data = array(0 => 'AAAA' , 1 => 'F0AAAA' , 2 => 'AAAA' , 3 => 'F0AAAB');

Si yo le aplico una un substr($value,-4) a cada uno, encontraría una diferencia, que es la cadena "AAAB", lo que yo quisiera hacer es una función que me devuelva el "F0AAAB"

He intentado con esto:

Código PHP:

function nocomun($value){

    return 
substr($value,-4) != 'AAAA';

}

$data = array(=> 'AAAA' => 'F0AAAA' => 'AAAA' => 'F0AAAB');

print_r(array_filter($data,"nocomun")); 
Con esto tengo la solución... pero como podía obtener ese patrón "AAAA" dinámicamente , ya que los array podría tener diferentes elementos como por ejemplo:


$data = array(0 => '00BJ' , 1 => 'F000BB' , 2 => '00BB' , 3 => 'F000BB');

$data = array(0 => 'AHHH' , 1 => 'F0AHHH' , 2 => 'AHH1' , 3 => 'F0AHHH');

$data = array(0 => 'CAD1' , 1 => 'F0COD1' , 2 => 'CAD1' , 3 => 'F0CAD1');

Espero me puedan ayudar, gracias!
__________________
Quitenme la vida pero no la bebida.
  #2 (permalink)  
Antiguo 30/05/2011, 13:28
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Obtener cadena diferente en array

mira, hice esta y la probe con las que pusiste y encuentra el valor no común, ve si te sirve:

Código PHP:
<?php
$data 
= array(=> 'AAAA' => 'F0AAAA' => 'AAAA' => 'F0AAAB');
//$data = array(0 => '00BJ' , 1 => 'F000BB' , 2 => '00BB' , 3 => 'F000BB');
//$data = array(0 => 'AHHH' , 1 => 'F0AHHH' , 2 => 'AHH1' , 3 => 'F0AHHH');
//$data = array(0 => 'CAD1' , 1 => 'F0COD1' , 2 => 'CAD1' , 3 => 'F0CAD1');
$prev=$comun=substr($data[3],-4);
foreach(
$data as $val){
    
$val4=substr($val,-4);
    if(
$val4==$prev$comun=$val4;
    elseif(
$val4!=$comun$nocomun=$val;
    
$prev=$val4;
}
echo 
"No comun: $nocomun";
?>
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #3 (permalink)  
Antiguo 30/05/2011, 16:59
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Pregunta Respuesta: Obtener cadena diferente en array

wow muchas gracias, funciona bien... pero me gustaría porfavor que me explicaras un poco el el funcionamiento del recorrido del foreach...

Parece que en primer lugar debo saber el número de elementos del array... qué pasa si son más? , luego, tomas el último valor del array con la variable $prev, pero parece que por cada recorrido cambia su valor no es así?

A otra cosita, es posible convertirla en una función para aplicarla en un array_filter()?... gracias por la ayuda.
__________________
Quitenme la vida pero no la bebida.

Última edición por cesarpunk; 30/05/2011 a las 17:06
  #4 (permalink)  
Antiguo 31/05/2011, 08:09
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Obtener cadena diferente en array

si se puede convertir en función solo tendrías que enviarle el array.

en cuanto al funcionamiento es tal como dices, al principio la variable $prev (que contiene siempre el valor anterior revisado para ir comparando) y la variable $comun (que contiene siempre el valor que haya encontrado repetido) reciben las últimas 4 letras del último elemento:

$prev=$comun=substr($data[3],-4);

en este caso el último elemento era el 3, sin embargo si no sabes cuantos elementos son podrías hacer un count() y restar 1 por la ubicacion 0:

$prev=$comun=substr($data[count($data)-1],-4);

luego el foreach toma cada elemento del arreglo y lo compara con el anterior, si es igual al anterior entonces lo considera un elemento $comun, si es distinto al $comun se considera $nocomun.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Etiquetas: diferente, cadenas
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 09:26.