Как удалить нулевые значения из массива?

У меня есть массив

Массив ([0] => 0 [1] => [2] => 3 [3] =>)

Я хочу удалить из него нулевые значения, и результат должен быть таким

Array ([0] => 0 [1] => 3) Я не хочу удалять 0 из массива.

это сделает трюк:

array_filter($arr, function($var){return !is_null($var);} ); 

Пример кода: http://3v4l.org/icEDa


для более старых версий (php <5.3):

 function is_not_null ($var) { return !is_null($var); } $filtered = array_filter($arr, 'is_not_null'); 

Пример кода: http://3v4l.org/CKrYO

Вы можете использовать array_filter() который избавится от пустых нулевых значений из массива

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

Вы можете просто пройти через него.

 <?php foreach ($array as $i=>$row) { if ($row === null) unset($array[$i]); } с <?php foreach ($array as $i=>$row) { if ($row === null) unset($array[$i]); } 

CodePad

Если вы хотите переиндексировать массив, чтобы удалить промежутки между ключами, вы можете просто использовать новый массив:

 <?php $array2 = array(); foreach ($array as $row) { if ($row !== null) $array2[] = $row; } $array = $array2; 

CodePad

 <?php $arr = array( 0 => 0, 1=>null, 2=>3, 3=>null); foreach ($arr as $key=>$val) { if ($val === null) unset($arr[$key]); } $new_arr = array_values($arr); print_r($new_arr); ?> с <?php $arr = array( 0 => 0, 1=>null, 2=>3, 3=>null); foreach ($arr as $key=>$val) { if ($val === null) unset($arr[$key]); } $new_arr = array_values($arr); print_r($new_arr); ?> 

Вывод:

 Array ( [0] => 0 [1] => 3 ) 

Теперь вы находитесь в мире проблем, потому что не слишком легко отличить null от 0 от false от «» от 0.0. Но не беспокойтесь, это разрешимо:

  $result = array_filter( $array, 'strlen' ); 

Это ужасно само по себе, но, похоже, работает.

РЕДАКТИРОВАТЬ:

Это плохой совет, потому что трюк опирается на странный угловой случай:

  • strlen (0) будет strlen ("0") -> 1, таким образом, true
  • strlen (NULL) будет strlen ("") -> 0, таким образом, false
  • strlen ("") будет strlen (("") -> 0, таким образом, false и т. д.

То, как вы должны это делать, это что-то вроде этого:

  $my_array = array(2, "a", null, 2.5, NULL, 0, "", 8); function is_notnull($v) { return !is_null($v); } print_r(array_filter($my_array, "is_notnull")); 

Это хорошо читаемо.

просто

 $keys=array_keys($yourArray,NULL); if(!empty($keys)) { foreach($keys as $key) { unset($yourArray[$key]); } } var_dump($yourarray); с $keys=array_keys($yourArray,NULL); if(!empty($keys)) { foreach($keys as $key) { unset($yourArray[$key]); } } var_dump($yourarray);