У меня есть массив
Массив ([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' );
Это ужасно само по себе, но, похоже, работает.
РЕДАКТИРОВАТЬ:
Это плохой совет, потому что трюк опирается на странный угловой случай:
То, как вы должны это делать, это что-то вроде этого:
$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);