В PHP удалить пустой ключ null массив значений, сохраняя при этом ключ-значение в противном случае не пустые/нулевые
У меня есть массив, который имеет около 12 потенциальных пар ключ / значение. Которые основаны на A _POST/_GET
Ключи не числовые, как в 0-n, и мне нужно сохранить ключи со значениями там, где это применимо. Моя проблема в том, что я знаю, что иногда ключ будет передан, где значение равно null, empty или равно ". В этом случае я хочу обрезать эти ключи перед обработкой моего массива. Как Бегущий вниз по линии без чего-то там собирается сломать мой скрипт.
Теперь некоторое время назад я либо создал, либо нашел эту функцию (я не помню, какая из них была в моем арсенале некоторое время, в любом случае).
function remove_array_empty_values($array, $remove_null_number = true)
{
$new_array = array();
$null_exceptions = array();
foreach($array as $key => $value)
{
$value = trim($value);
if($remove_null_number)
{
$null_exceptions[] = '0';
}
if(!in_array($value, $null_exceptions) && $value != "")
{
$new_array[] = $value;
}
}
return $new_array;
}
То, что я хотел бы сделать, очень похоже на это, однако это хорошо работает с массивами, которые могут иметь n-n ключевых значений, и я не зависим от ключа, а также значения, чтобы определить, что, где и когда. Поскольку выше будет просто удалить все в основном то просто перестроил массив. Где я застрял, пытаюсь понять. о том, как имитировать вышеупомянутую функцию, но где я сохраняю нужные мне ключи.
4 ответов:
Если я правильно понимаю, что вам нужно, вы можете использовать
array_filter()или сделать что-то вроде этого:foreach($myarray as $key=>$value) { if(is_null($value) || $value == '') unset($myarray[$key]); }
Если вы хотите быстро удалить пустые, ложные и пустые строки ( "" ), но оставить значения 0 (ноль), вы можете использовать стандартную php-функцию strlen в качестве функции обратного вызова:
// removes all NULL, FALSE and Empty Strings but leaves 0 (zero) values $result = array_filter( $array, 'strlen' );Источник: http://php.net/manual/en/function.array-filter.php#111091
array_filterэто встроенная функция, которая делает именно то, что вам нужно. Самое большее, вам нужно будет предоставить свой собственный обратный вызов, который решает, какие значения остаются, а какие удаляются. Ключи будут сохранены автоматически, как указано в описании функции.Например:
// This callback retains values equal to integer 0 or the string "0". // If you also wanted to remove those, you would not even need a callback // because that is the default behavior. function filter_callback($val) { $val = trim($val); return $val != ''; } $filtered = array_filter($original, 'filter_callback');
Используйте +1 с переменной key, чтобы пропустить нулевой ключ в массиве
foreach($myarray as $key=>$value) { echo $key+1; //skip null key }
Comments