Как фильтровать пустые пары ключ / значение из массива $ _POST?

#php #arrays

#php #массивы

Вопрос:

Я пытаюсь создать объявление php array (ассоциативное) только для непустых пар ключ-значение, которые я получаю из $ _POST. Есть предположения, как это сделать?

 $my_array = [

"k1"=>"$val1",
"k2"=>"$val2",
"k3"=>"$val3",
"k4"=>"$val4"

];
  

Но, если $ val4 и $ val3 пусты / НУЛЕВЫЕ / не существуют, тогда :

 $my_array = [

"k1"=>"$val1",
"k2"=>"$val2"

];
  

Спасибо

Комментарии:

1. вы можете попробовать array_filter()

2. Ключи не поступают из $ _POST в качестве имен полей, они являются пользовательскими.

3. Спасибо за ОТРИЦАТЕЛЬНЫЕ ОТЗЫВЫ..

4. Нет, нет, я не избиратель, я предлагаю вам решение

Ответ №1:

Как упоминали другие, вы можете использовать фильтр массива,

если вы не хотите, чтобы значения 0 считались пустыми, вы можете сделать что-то вроде этого

 $post = array_filter( $_POST, function( $item ){ return strlen( $item ); });
  

Фильтр массива будет обрабатывать 0 , '' , false , null и, я думаю '0' , и, возможно, некоторые другие, все как пустые. Вы можете использовать обратный вызов, такой как мой пример. Когда обратный вызов возвращает false 0 , элемент удаляется, когда он возвращает true ( или> 0 ), он сохраняется. Таким образом, strlen вернет значение, равное длине строки, и все строки 0 длины будут удалены.

-примечание — это должно быть нормально для $ _POST, потому что обычно в нем не будет вложенных массивов, но если есть вложенные массивы, то strlen, очевидно, не будет работать с массивом (будучи этим $item = array() в обратном вызове).

Комментарии:

1. Ключи не поступают из $ _POST в качестве имен полей, они являются пользовательскими.

Ответ №2:

$_POST уже является ассоциативным массивом. Например, в форме ключом является элемент ‘name’, а значением является ввод пользователя. Пустые входные данные все равно будут генерировать пару ключ / значение, но вы можете легко отфильтровать их с помощью array_filter()

Редактировать:

Вот пример реализации:

 array_filter($array, function(x) { 
    if is_null(x) return false;
    else return true;
});
  

Комментарии:

1. вы должны упомянуть, какой фильтр массива рассматривается как пустой, 0 возможно, это не то, что они хотят рассматривать как это ''

2. @ArtisticPhoenix array_filter() обрабатывает 0 так, как вы ему указываете, потому что array_filter() использует метод обратного вызова для определения того, что фильтруется, а что нет.

3. Ключи не поступают из $ _POST в качестве имен полей, они являются пользовательскими.

4. Независимо от ключей, array_filter() будет перебирать каждую запись массива и делать с ней то, что вы хотите.

Ответ №3:

Вы можете написать функцию для проверки нулевых или пустых значений следующим образом:

 <?php

function transform(amp;$data) {
    foreach(array_keys($data) as $key) {
        if( is_null($data[$key]) 
            || empty($data[$key]) 
        ) {
            unset($data[$key]);
        } 
    }
}

// usage
$data = [
    "example1" => 5,
    "example2" => "some text",
    "example3" => null,
    "example4" => [],
];

transform($data);

print_r($data);

?>
  

Пример вывода print_r() :

 Array
(
    [example1] => 5
    [example2] => some text
)
  

Комментарии:

1. Как указано в предыдущих ответах 2, array_filter() это функция, которая уже позволяет реализовать то, что вы предлагаете. Нет необходимости переписывать его.

2. @MatthewGoulart Спасибо за ввод .. я ничего не переписывал 🙂