[Php] Eliminar elementos de matriz vacíos


Answers

Puede 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: Quizás sus elementos no estén vacíos per se pero contengan uno o más espacios ... Puede usar lo siguiente antes de usar array_filter

$trimmedArray = array_map('trim', $linksArray);
Question

Algunos elementos en mi matriz son cadenas vacías basadas en lo que el usuario ha enviado. Necesito eliminar 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.




Tenía que hacer esto para mantener un valor de matriz de (cadena) 0

$url = array_filter($data, function ($value) {
  return (!empty($value) || $value === 0 || $value==='0');
});



Otro revestimiento para eliminar los elementos vacíos ("" cadena vacía) de su matriz.

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

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

O tal vez quieras recortar tus elementos de matriz primero:

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

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




$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




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 evalúa a booleano falso, por lo tanto, aunque no es una cadena vacía, se filtrará. Eso sería un error.

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

Entonces, la respuesta absoluta, definitiva y correcta es:

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



Solo quiero contribuir con una alternativa a los bucles ... también abordando las lagunas en las claves ...

En mi caso, quería mantener las teclas de matriz secuenciales cuando la operación estaba completa (no solo los números impares, que es lo que estaba mirando. Configurar el código para buscar solo las teclas impares me parecía frágil y no favorable para el futuro).

Estaba buscando algo más como esto: http://gotofritz.net/blog/howto/removing-empty-array-elements-php/

La combinación de array_filter y array_slice hace el truco.

$example = array_filter($example); $example = array_slice($example,0);

No tengo idea de las eficiencias o puntos de referencia, pero funciona.




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

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



Puedes simplemente 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 () se eliminarán también.

La otra opción es hacer

array_diff($array, array(''))

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á 0 y '0'
  • NULL, FALSE o '' eliminará NULL, FALSE y ''



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
    );



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



Uso la siguiente secuencia de comandos para eliminar elementos vacíos de una matriz

for ($i=0; $i<$count($Array); $i++)
  {
    if (empty($Array[$i])) unset($Array[$i]);
  }



Para una matriz multidimensional

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