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(
0 => array(
'nombre' => 'Juan',
'apellido' => 'Perez',
'edad' => '23',
'intereses' => array('futbol', 'tenis', 'basquet')
),
1 => array(
'nombre' => 'Martin',
'apellido' => 'Pescador',
'edad' => '19',
'intereses' => array('futbol', 'cine')
),
2 => array(
'nombre' => 'Micaela',
'apellido' => 'Diaz',
'edad' => '25',
'intereses' => array('cine', 'hockey')
),
3 => 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.