Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/12/2011, 22:23
Dago1988
 
Fecha de Ingreso: noviembre-2009
Mensajes: 15
Antigüedad: 14 años, 5 meses
Puntos: 0
Exclamación Usar unset() en array multidimensional

Hola. Tengo una matriz multidimensional que tiene datos con esta estructura:

$matriz3d[0]['apellido'] => 'fernandez';
$matriz3d[0]['intereses'][0] => 'futbol';
$matriz3d[0]['intereses'][1] => 'tenis';

Luego tengo una función que elimina todos los elementos de $matriz3d, cuyos subelementos 'intereses' no coincidan el parámetro de la función. Para esto utilizo unset().
ej: quitaLaGrasa('futbol') ----> eliminaría todos los elementos que no tengan como interes 'futbol'.

El problema es que la función elimina todos los elementos, no solo los que no coinciden con el parametro pasado.

Aquí dejo código de ejemplo:
Código PHP:
<?php
  
// Matriz tridimensional
  
$matriz3d = array(
    
=> array(
      
'nombre' => 'Juan',
      
'apellido' => 'Perez',
      
'edad' => '23',
      
'intereses' => array('futbol''tenis''basquet')
    ),
    
=> array(
      
'nombre' => 'Martin',
      
'apellido' => 'Pescador',
      
'edad' => '19',
      
'intereses' => array('futbol''cine')
    ),
    
=> array(
      
'nombre' => 'Micaela',
      
'apellido' => 'Diaz',
      
'edad' => '25',
      
'intereses' => array('cine''hockey')
    ),
    
=> array(
      
'nombre' => 'Paola',
      
'apellido' => 'Sanchez',
      
'edad' => '21',
      
'intereses' => 'libros'
    
)
  );

  function 
sacaLaGrasa($sel)
  {
    global 
$matriz3d;
    foreach ( 
$matriz3d as $key => $valor )
    {
      if ( isset(
$matriz3d[$key]['intereses']) )
      {
        if ( 
is_array($matriz3d[$key]['intereses']) )
        {
          foreach ( 
$matriz3d[$key]['intereses'] as $a )
          {
            if ( 
$a != $sel ):
              unset(
$matriz3d[$key]);
            endif;
          };
        }
        else
        {
          if ( 
$matriz3d[$key]['intereses'] != $sel ):
            unset(
$matriz3d[$key]);
          endif;
        };
      }
      else
      {
        unset(
$matriz3d[$key]);
      };
    };
  };
  echo 
'<pre>$matriz3d antes de llamar a la función'."\n";
  
print_r($matriz3d);
  echo 
'</pre>'."\n";
  
  
sacaLaGrasa('futbol');

  echo 
'<pre>$matriz3d luego de llamar a la función'."\n";
  
print_r($matriz3d);
  echo 
'</pre>'."\n";

?>
Gracias por la respuesta.