2012-03-05 13 views
5

Tengo una matriz que tiene unos 12 pares de clave/valor potenciales. Que se basan en _POST/_GETPHP remove empty, null Clave/valores de la matriz manteniendo las claves/valores de lo contrario no vacíos/nulos

Las claves no son numéricas como en 0-n, y debo conservar las claves con sus valores cuando corresponda. Mi problema es que sé que en ocasiones se pasará una clave donde el valor es nulo, vacío o igual a ''. En caso de que sea el caso, quiero recortar esas teclas antes de procesar mi matriz. Como corriendo por la línea sin algo, va a romper mi script.

Hace un tiempo que hice o encontré esta función (no recuerdo cuál ha estado en mi arsenal por un tiempo, de cualquier manera).

function remove_array_empty_values($array, $remove_null_number = true) 
    { 
     $new_array = array(); 
     $null_exceptions = array(); 
     foreach($array as $key => $value) 
     { 
      $value = trim($value); 
      if($remove_null_number) 
      { 
       $null_exceptions[] = '0'; 
      } 
      if(!in_array($value, $null_exceptions) && $value != "") 
      { 
       $new_array[] = $value; 
      } 
     } 
     return $new_array; 
    } 

lo que me gustaría hacer es muy similar a este, sin embargo, esto funciona bien con matrices que pueden tener valores clave nn y no soy dependiente de la clave, así como el valor para determinar qué es lo dónde y cuando. Como lo anterior simplemente eliminará todo, básicamente solo reconstruirá la matriz. Donde estoy atascado es tratar de descubrir cómo imitar la función anterior, pero donde conservo las claves que necesito.

+1

A menos que me entienda mal el requisito, que es la función exacta de [ 'array_filter()'] (http: //us3.php.net/manual/en/function.array-filter.php) –

+0

posible duplicado de [Eliminar valores cero de una matriz PHP] (http://stackoverflow.com/questions/2287404/remove-zero- values-from-a-php-array) – hakre

Respuesta

10

Si he entendido bien lo que está buscando, puede utilizar array_filter() o puede hacer algo como esto:

foreach($myarray as $key=>$value) 
{ 
    if(is_null($value) || $value == '') 
     unset($myarray[$key]); 
} 
+1

Es posible que desee usar 'if (empty ($ value))' para que sea más completo. –

+0

@GeorgeCummins: de acuerdo, esa es una opción. Internamente, hace lo mismo, ¿verdad? –

+0

'empty()' es más completo porque también comprueba 0, falso, "0", 0.0, matrices vacías, etc. También es un poco más simple de leer y mantener. –

4

array_filter es una función incorporada que hace exactamente lo que necesita. Como máximo, deberá proporcionar su propia devolución de llamada que decida qué valores se mantienen y cuáles se eliminan. Las claves se conservarán automáticamente, como lo indica la descripción de la función.

Por ejemplo:

// This callback retains values equal to integer 0 or the string "0". 
// If you also wanted to remove those, you would not even need a callback 
// because that is the default behavior. 
function filter_callback($val) { 
    $val = trim($val); 
    return $val != ''; 
} 

$filtered = array_filter($original, 'filter_callback'); 
6

Si quieres una forma rápida elimine NULL, FALSE y Empty Strings (""), pero deje valores de 0 (cero), puede usar la función estándar php strlen como función de devolución de llamada:

// removes all NULL, FALSE and Empty Strings but leaves 0 (zero) values 
$result = array_filter($array, 'strlen'); 

Fuente: http://php.net/manual/en/function.array-filter.php#111091

0

uso 1 con su variable clave para saltar clave nulo en serie

foreach($myarray as $key=>$value) 
{ 
    echo $key+1; //skip null key 
} 
Cuestiones relacionadas