Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/08/2007, 20:40
Computer XTress
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 4 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!