Eliminar elementos de matriz vacíos

Resuelto Will asked hace 54 años • 27 respuestas

Algunos elementos de mi matriz son cadenas vacías de usuarios. $linksArraytodavía tiene elementos vacíos después de lo siguiente:

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

La empty()función tampoco funciona.

Will avatar Jan 01 '70 08:01 Will
Aceptado

Como estás trabajando con una serie de cadenas, simplemente puedes usar array_filter(), que maneja todo esto convenientemente por ti:

$linksArray = array_filter($linksArray);

Tenga en cuenta que si no se proporciona ninguna devolución de llamada , se eliminarán todas las entradas de la matriz iguales a FALSE(consulte la conversión a booleano ). Entonces, si necesita conservar elementos que son, por ejemplo, una cadena exacta '0', necesitará una devolución de llamada personalizada:

// PHP 7.4 and later
print_r(array_filter($linksArray, fn($value) => !is_null($value) && $value !== ''));

// PHP 5.3 and later
print_r(array_filter($linksArray, function($value) { return !is_null($value) && $value !== ''; }));

// PHP < 5.3
print_r(array_filter($linksArray, create_function('$value', 'return $value !== "";')));

Nota: Si necesita volver a indexar la matriz después de eliminar los elementos vacíos, utilice:

$linksArray = array_values(array_filter($linksArray));
BoltClock avatar Sep 06 '2010 21:09 BoltClock

Puedes usar array_filterpara eliminar elementos vacíos:

$emptyRemoved = array_filter($linksArray);

Si tiene (int) 0en 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 contengan uno o más espacios... Puede usar lo siguiente antes de usararray_filter

$trimmedArray = array_map('trim', $linksArray);
Andrew Moore avatar Sep 06 '2010 21:09 Andrew Moore