Foros del Web » Programando para Internet » PHP »

eliminar elementos de array multidimensional

Estas en el tema de eliminar elementos de array multidimensional en el foro de PHP en Foros del Web. Hola , Tengo un array con la siguiente estructura. Código PHP: Array (     [ 0 ] => Array         (             [ email ] =>  john . doe @ sendgrid ...
  #1 (permalink)  
Antiguo 20/06/2016, 20:55
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 13 años, 3 meses
Puntos: 61
eliminar elementos de array multidimensional

Hola ,

Tengo un array con la siguiente estructura.

Código PHP:
Array
(
    [
0] => Array
        (
            [
email] => john.doe@sendgrid.com
            
[timestamp] => 1337966810
            
[category] => Array
                (
                    [
0] => survey78399_
                    
[1] => transactional
                
)

            [
event] => delivered
        
)

    [
1] => Array
        (
            [
email] => juanito@email.com
            
[timestamp] => 1337966855
            
[category] => Array
                (
                    [
0] => survey78399
                    
[1] => transactional
                
)

            [
event] => spam
        
)

    [
2] => Array
        (
            [
email] => jajjaa@test.com
            
[timestamp] => 1337966899
            
[category] => Array
                (
                    [
0] => survey78399
                    
[1] => transactional
                
)

            [
event] => open
        
)

    [
3] => Array
        (
            [
email] => jane.doe@sendgrid.com
            
[timestamp] => 1337966899
            
[category] => survey78399
            
[event] => open
        
)


ahora necesito eliminar todos los elementos donde category sea distinto a survey78399
la funcion que uso para recorrer esto es :

Código PHP:
function recorro($matriz){
        foreach(
$matriz as $key=>$value){
            if (
is_array($value)){
                
//si es un array sigo recorriendo
              
echo 'keyx:'$key;
              echo 
'<br>';
             
recorro($value);
          }else{  
             
//si es un elemento lo muestro
             
echo $key.': '.$value ;
             echo 
'<br>';
          }
 
       }

Espero alguien pueda darme una mano.

Saludos
  #2 (permalink)  
Antiguo 21/06/2016, 08:54
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: eliminar elementos de array multidimensional

Otra opción es que uses array_filter de forma recursiva.
Código PHP:
Ver original
  1. $array = [
  2.     0 =>
  3.         [
  4.             "email" => "[email protected]",
  5.             "timestamp" => "1337966810",
  6.             "category" =>
  7.                 [
  8.                     0 => "survey78399_",
  9.                     1 => "transactional",
  10.                 ],
  11.  
  12.             "event" => "delivered",
  13.         ],
  14.  
  15.     1 =>
  16.         [
  17.             "email" => "[email protected]",
  18.             "timestamp" => "1337966855",
  19.             "category" =>
  20.                 [
  21.                     0 => "survey78399",
  22.                     1 => "transactional",
  23.                 ],
  24.  
  25.             "event" => "spam",
  26.         ],
  27.  
  28.     2 =>
  29.         [
  30.             "email"=> "[email protected]",
  31.             "timestamp" => "1337966899",
  32.             "category" =>
  33.                 [
  34.                     0 => "survey8888",
  35.                     1 => "transactional",
  36.                 ],
  37.  
  38.             "event" => "open",
  39.         ],
  40.  
  41.     3 =>
  42.         [
  43.             "email" => "[email protected]",
  44.             "timestamp" => "1337966899",
  45.             "category" => "survey78399",
  46.             "event" => "open",
  47.         ]
  48. ];
  49.  
  50. $search = 'survey78399';
  51.  
  52. $callback = function($item) use (&$callback, &$search) {
  53.     if (is_array($item)) {
  54.         return array_filter($item, $callback);
  55.     }else {
  56.         return $item == $search;
  57.     }
  58. };
  59.  
  60. $filtered = array_filter($array, $callback);
  61.  
  62. print_r($filtered); // imprime solo key 1 y 3 del arreglo original
  63. /*
  64. Array
  65. (
  66.     [1] => Array
  67.         (
  68.             [email] => [email protected]
  69.             [timestamp] => 1337966855
  70.             [category] => Array
  71.                 (
  72.                     [0] => survey78399
  73.                     [1] => transactional
  74.                 )
  75.  
  76.             [event] => spam
  77.         )
  78.  
  79.     [3] => Array
  80.         (
  81.             [email] => [email protected]
  82.             [timestamp] => 1337966899
  83.             [category] => survey78399
  84.             [event] => open
  85.         )
  86.  
  87. )
  88.  
  89. */
Te recomiendo que leas el manual ya que php cuenta con funciones muy útiles para trabajar con arreglos
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: elementos, multidimensional
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 01:23.