Foros del Web » Programando para Internet » PHP »

Comparando arrays

Estas en el tema de Comparando arrays en el foro de PHP en Foros del Web. hola a todos! Tengo un problema que he logrado resolver pero creo que existe una forma más eficiente, o alguna función predefinida para hacerlo. Yo ...
  #1 (permalink)  
Antiguo 15/08/2007, 20:40
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 10 meses
Puntos: 2
Comparando arrays

hola a todos!

Tengo un problema que he logrado resolver pero creo que existe una forma más eficiente, o alguna función predefinida para hacerlo.


Yo tengo estos dos arrays:

$ar_totales[]['m_id']['m_titulo']
$ar_activos[]['m_id']['m_titulo']


En $ar_totales[] tengo 4 registros ($ar_totales[0], $ar_totales[1], $ar_totales[2]...) cada uno de los cuales tiene su propio "m_titulo" y "m_id".


En $ar_activos[] tengo solo algunos de los registros que existen $ar_totales... siempre trabajo con los mismos registros.

Yo deseo generar un nuevo array que contenga todos aquellos registros que están en $ar_totales y no están en $ar_activos. Este array será llamado $ar_pasivos[].

Ejemplo de cómo estarían cargados estos registros:

Código PHP:

// TOTALES
$ar_totales[0]['m_id'] = 1;
$ar_totales[0]['m_titulo'] = "SISTEMA";
$ar_totales[1]['m_id'] = 2;
$ar_totales[1]['m_titulo'] = "REDACCION";
$ar_totales[2]['m_id'] = 3;
$ar_totales[2]['m_titulo'] = "NEWSLETTER"
$ar_totales[3]['m_id'] = 4;
$ar_totales[3]['m_titulo'] = "ARCHIVOS";


// ACTIVOS
$ar_activos[0]['m_id'] = 2;
$ar_activos[0]['m_titulo'] = "REDACCION";
$ar_activos[1]['m_id'] = 4;
$ar_activos[1]['m_titulo'] = "ARCHIVOS"
Como ven los tipos de registros son siempre los mismos. Estoy trabajando con data que levanto de la BD, lo que levanto es el TITULO de un modulo y su correspondiendo ID.

Asi logre generar el nuevo array que me diga CUALES de los registros que figuran en "$ar_totales" no figuran en "$ar_activos":


Código PHP:

$flag 
0;
$x 0;

for (
$i=0$i count($ar_totales); $i++) {

    for (
$y=0$y count($ar_activos); $y++) {

        if (
$ar_totales[$i]['m_id'] == $ar_activos[$y]['m_id']) {
            
$flag 0;
            break;

        } else {

            
$flag 1;
            continue;
        }
    }

    if (
$flag == 1) {
        
$ar_pasivos[$x]['m_id'] = $ar_totales[$i]['m_id'];
        
$ar_pasivos[$x]['m_titulo'] = $ar_totales[$i]['m_titulo'];
        
$x++;
        
$flag 0;
    }

Intente usar las funciones array_diff y array_diff_assoc y no me sirvieron ya que siempre tengo el primer indice del array diferente entre el $ar_totales y $ar_activos...

¿Creen que hay alguna forma más standard de hacer esto ó está bien como lo hice?


Desde ya, muchas gracias!
  #2 (permalink)  
Antiguo 15/08/2007, 20:48
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
Re: Comparando arrays

Que tal, creo que la mejor opción es usar la función array_diff y manipularla según tu necesidad.

salu2
  #3 (permalink)  
Antiguo 15/08/2007, 22:15
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 10 meses
Puntos: 2
Re: Comparando arrays

Si yo en un principio lo intenté y decistí. Creo que me cuesta interpretar graficamente cómo queda armado el formato de la matriz... y por eso me costo tanto armar el array resultante.

Gracias por tu opinion ZSAMER. Voy a examinar cómo hacerlo con array_diff a ver que pasa..

si alguno sabe alguna se agradece :)

saludos
  #4 (permalink)  
Antiguo 17/08/2007, 10:28
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Comparando arrays

Hola Computer XTress, Yo creo que deberías evaluar de regenerar ambos arrays con una estructura que te sea mas acorde a tus necesidades. O sea, vos necesitarías tener por lo que leo algo como:
Código PHP:
$ar_totales(
0=>  array('m_id'=>1,'m_titulo'=>'hola mundo','activo'=>1),
1=>  array('m_id'=>2,'m_titulo'=>'hola mundo','activo'=>0),
2=>  array('m_id'=>3,'m_titulo'=>'hola mundo','activo'=>1),
3=>  array('m_id'=>4,'m_titulo'=>'hola mundo','activo'=>1)

Con esto sacaras peso en memoria y en loops innecesarios, pero hay que ver si lo podes conseguir de entrada.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 31/08/2007, 09:59
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 10 meses
Puntos: 2
Re: Comparando arrays

Nicolas, gracias por contestar.

Si, finalmente termine con esa estructura. Se me complicaba un poco por que el array lo iva armando con diferentes consultas en realidad.

Un saludo grande y gracias!
  #6 (permalink)  
Antiguo 31/08/2007, 10:12
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Comparando arrays

Genial!, me alegra que te haya sido útil!. Nos hablamos.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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 12:15.