Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

91
Vistas
Filtre la matriz recursiva y solo elimine el valor NULL

Quiero eliminar todos los valores nulos o en blanco, pero no los valores falsos y 0 de la matriz recursiva.

 function isNotNull($val) { if(is_array($val)) { $ret = array_filter($val, 'isNotNull'); return $ret; } else { return (!is_null($val) && $val !== ''); } }

$matriz = array_filter($matriz, 'noesNulo');

Aporte:

 $arr = array( "stringKey" => "Abc", "boolKey" => false, "zeroKey" => 0, "blankKey" => '', "newArr" => array( "stringKey2"=>"Abc2", "boolKey2"=>false, "zeroKey2" => 0, "blankKey2"=>"", "blankArr" => array() ) );

Esto da salida:

 Array ( [stringKey] => Abc [boolKey] => [zeroKey] => 0 [newArr] => Array ( [stringKey2] => Abc2 [boolKey2] => [zeroKey2] => 0 [blankKey2] => [blankArr] => Array ( ) ) )

Pero quiero la siguiente salida:

 Array ( [stringKey] => Abc [boolKey] => [zeroKey] => 0 [newArr] => Array ( [stringKey2] => Abc2 [boolKey2] => [zeroKey2] => 0 ) )

Usé array_filter con la función de devolución de llamada, pero solo filtra una matriz simple, no una matriz multidimensional. No quiero usar bucle.

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede combinar array_map y array_filter en una función llamada recursiva. Algo como esto podría funcionar para usted.

 function filterNotNull($array) { $array = array_map(function($item) { return is_array($item) ? filterNotNull($item) : $item; }, $array); return array_filter($array, function($item) { return $item !== "" && $item !== null && (!is_array($item) || count($item) > 0); }); }
about 4 years ago · Santiago Trujillo Denunciar

0

No es necesario reinventar la recursividad usted mismo. Puedes usar RecursiveCallbackFilterIterator :

 $iterator = new RecursiveIteratorIterator( new RecursiveCallbackFilterIterator( new RecursiveArrayIterator($arr), function ($value) { return $value !== null && $value !== ''; } ) ); $result = iterator_to_array($iterator);

Aquí está la demostración de trabajo .

Deberías intentar usar tanto material de la biblioteca PHP estándar (SPL) como puedas.

ACTUALIZACIÓN: como se indica en los comentarios, la solución con iterador en realidad no es adecuada para este propósito.

En los comentarios a la función array_walk_recursive puede encontrar la implementación de la función walk_recursive_remove :

 function walk_recursive_remove (array $array, callable $callback) { foreach ($array as $k => $v) { if (is_array($v)) { $array[$k] = walk_recursive_remove($v, $callback); } else { if ($callback($v, $k)) { unset($array[$k]); } } } return $array; }

Esta versión generalizada de la función de recursión toma criterios en forma de devolución de llamada. Con esta función, puede eliminar elementos vacíos como este:

 $result = walk_recursive_remove($arr, function ($value) { return $value === null || $value === ''; });

Aquí está la demostración de trabajo .

about 4 years ago · Santiago Trujillo Denunciar

0

Aquí necesita filtrar una matriz para empty string . En este código a continuación, puede agregar ningún cheque para filtrarlo recursivamente. Espero que funcione bien.

Pruebe este fragmento de código aquí

 <?php ini_set('display_errors', 1); //Using more complexed sample array for filter it. $arr = array( "stringKey" => "Abc", "boolKey" => false, "zeroKey" => 0, "blankKey" => '', "newArr" => array( "stringKey2" => "Abc2", "boolKey2" => false, "zeroKey2" => 0, "blankKey2" => "", "blankArr" => array( "blankString"=>"", "zeroKey"=>0, "blankArr3"=>array() ) ) ); $result=recursiveFilter($arr); print_r($result); function recursiveFilter($value) { foreach ($value as $key => $value1) { if ($value1 === "") unset($value[$key]);//you can add no. of conditions here. else if (is_array($value1)) $value[$key] = recursiveFilter($value1); } return $value; }

Producción:

 Array ( [stringKey] => Abc [boolKey] => [zeroKey] => 0 [newArr] => Array ( [stringKey2] => Abc2 [boolKey2] => [zeroKey2] => 0 [blankArr] => Array ( [zeroKey] => 0 [blankArr3] => Array ( ) ) ) )
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda