php - Eliminar elementos de la matriz vacía




12 Answers

Puedes usar array_filter para eliminar elementos vacíos:

$emptyRemoved = array_filter($linksArray);

Si tiene (int) 0 en su matriz, puede usar lo siguiente:

$emptyRemoved = remove_empty($linksArray);

function remove_empty($array) {
  return array_filter($array, '_remove_empty_internal');
}

function _remove_empty_internal($value) {
  return !empty($value) || $value === 0;
}

EDITAR: Tal vez sus elementos no estén vacíos per se, pero contienen uno o más espacios ... Puede usar lo siguiente antes de usar array_filter

$trimmedArray = array_map('trim', $linksArray);
php arrays string

Algunos elementos de mi matriz son cadenas vacías basadas en lo que el usuario ha enviado. Necesito quitar esos elementos. Tengo esto:

foreach($linksArray as $link)
{
    if($link == '')
    {
        unset($link);
    }
}
print_r($linksArray);

Pero no funciona, $linksArray todavía tiene elementos vacíos. También he intentado hacerlo con la función empty() pero el resultado es el mismo.




La respuesta más popular sobre este tema es absolutamente INCORRECTA.

Considere el siguiente script PHP:

<?php
$arr = array('1', '', '2', '3', '0');
// Incorrect:
print_r(array_filter($arr));
// Correct:
print_r(array_filter($arr, 'strlen'));

¿Por qué es esto? Debido a que una cadena que contiene un solo carácter '0' también se evalúa como booleano falso, por lo que aunque no sea una cadena vacía, aún se filtrará. Eso sería un error.

Pasar la función strlen incorporada como la función de filtrado funcionará, ya que devuelve un entero distinto de cero para una cadena no vacía y un entero cero para una cadena vacía. Los enteros que no son cero siempre se evalúan como verdaderos cuando se convierten a booleanos, mientras que los enteros cero siempre se evalúan como falsos cuando se convierten a booleanos.

Entonces, la respuesta absoluta, definitiva y correcta es:

$arr = array_filter($arr, 'strlen');



Solo puedes hacer

array_filter($array)

array_filter: "Si no se proporciona devolución de llamada, se eliminarán todas las entradas de entrada igual a FALSE". Esto significa que los elementos con valores NULL, 0, '0', '', FALSE, array () también se eliminarán.

La otra opción es hacer.

array_diff($array, array(''))

lo que eliminará elementos con valores NULL, '' y FALSE.

Espero que esto ayude :)

ACTUALIZAR

Aquí hay un ejemplo.

$a = array(0, '0', NULL, FALSE, '', array());

var_dump(array_filter($a));
// array()

var_dump(array_diff($a, array(0))) // 0 / '0'
// array(NULL, FALSE, '', array());

var_dump(array_diff($a, array(NULL))) // NULL / FALSE / ''
// array(0, '0', array())

Para resumir:

  • 0 o '0' eliminarán 0 y '0'
  • NULL, FALSE o '' eliminará NULL, FALSE y ''



Otro forro para eliminar elementos vacíos ("" cadenas vacías) de su matriz.

$array = array_filter($array, create_function('$a','return $a!=="";'));

Nota: Este código mantiene deliberadamente nulos, 0 y elementos falsos.

O quizás quieras recortar primero los elementos de tu matriz:

$array = array_filter($array, create_function('$a','return trim($a)!=="";'));

Nota: este código también elimina elementos nulos y falsos.




La respuesta más votada es incorrecta o, al menos, no es completamente cierta, ya que el OP solo habla de cadenas en blanco. Aquí hay una explicación completa:

¿Qué significa vacío ?

En primer lugar, debemos estar de acuerdo en lo que significa vacío . ¿Te refieres a filtrar:

  1. sólo las cadenas vacías ("")?
  2. los valores estrictamente falsos ? ( $element === false )
  3. los valores falseos ? (es decir, 0, 0.0, "", "0", NULL, array () ...)
  4. ¿El equivalente de la función empty() de PHP?

¿Cómo se filtran los valores?

Para filtrar solo las cuerdas vacías :

$filtered = array_diff($originalArray, array(""));

Para filtrar solo valores estrictamente falsos , debe usar una función de devolución de llamada :

$filtered = array_diff($originalArray, 'myCallback');
function myCallback($var) {
    return $var === false;
}

La devolución de llamada también es útil para cualquier combinación en la que desee filtrar los valores de "falsey", excepto algunos. (Por ejemplo, filtre cada null y false , etc., dejando solo 0 ):

$filtered = array_filter($originalArray, 'myCallback');
function myCallback($var) {
    return ($var === 0 || $var === '0');
}

El tercer y cuarto caso son (para nuestros propósitos al final) equivalentes, y para eso lo único que tiene que usar es el predeterminado:

$filtered = array_filter($originalArray);



En breve:

Este es mi código sugerido:

$myarray =  array_values(array_filter(array_map('trim', $myarray), 'strlen'));

Explicación:

Creo que el uso array_filter es bueno, pero no suficiente, porque los valores son como el space y \n , ... mantener en la matriz y esto suele ser malo.

Así que sugiero que uses la mezcla array_filter y array_map .

array_map es para recortar, array_filter es para eliminar valores vacíos, strlen es para mantener el valor 0 , y array_values es para re indexar si es necesario.

Muestras:

$myarray = array("\r", "\n", "\r\n", "", " ", "0", "a");

// "\r", "\n", "\r\n", " ", "a"
$new1 = array_filter($myarray);

// "a"
$new2 = array_filter(array_map('trim', $myarray));

// "0", "a"
$new3 = array_filter(array_map('trim', $myarray), 'strlen');

// "0", "a" (reindex)
$new4 = array_values(array_filter(array_map('trim', $myarray), 'strlen'));

var_dump($new1, $new2, $new3, $new4);

Resultados:

array(5) {
  [0]=>
" string(1) "
  [1]=>
  string(1) "
"
  [2]=>
  string(2) "
"
  [4]=>
  string(1) " "
  [6]=>
  string(1) "a"
}
array(1) {
  [6]=>
  string(1) "a"
}
array(2) {
  [5]=>
  string(1) "0"
  [6]=>
  string(1) "a"
}
array(2) {
  [0]=>
  string(1) "0"
  [1]=>
  string(1) "a"
}

Prueba en línea:

http://phpio.net/s/5yg0




Para matriz multidimensional

$data = array_map('array_filter', $data);
$data = array_filter($data);



$out_array = array_filter($input_array, function($item) 
{ 
    return !empty($item['key_of_array_to_check_whether_it_is_empty']); 
}
);



function trim_array($Array)
{
    foreach ($Array as $value) {
        if(trim($value) === '') {
            $index = array_search($value, $Array);
            unset($Array[$index]);
        }
    }
    return $Array;
}



Utilice la función array_filter para eliminar valores vacíos:

$linksArray = array_filter($linksArray);
print_r($linksArray);



$my = ("0"=>" ","1"=>"5","2"=>"6","3"=>" ");   

foreach ($my as $key => $value) {
    if (is_null($value)) unset($my[$key]);
}

foreach ($my as $key => $value) {
    echo   $key . ':' . $value . '<br>';
} 

salida

1: 5

2: 6




prueba esto ** ** Ejemplo

$or = array(
        'PersonalInformation.first_name' => $this->request->data['User']['first_name'],
        'PersonalInformation.last_name' => $this->request->data['User']['last_name'],
        'PersonalInformation.primary_phone' => $this->request->data['User']['primary_phone'],
        'PersonalInformation.dob' => $this->request->data['User']['dob'],
        'User.email' => $this->request->data['User']['email'],
    );



 $or = array_filter($or);

    $condition = array(
        'User.role' => array('U', 'P'),
        'User.user_status' => array('active', 'lead', 'inactive'),
        'OR' => $or
    );



Related