#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 Спасибо за ввод .. я ничего не переписывал 🙂