仅当不为空或为null时,才输出数组的值

时间:2019-01-31 23:16:08

标签: php arrays if-statement isset is-empty

我对php真的很陌生,不知道我应该怎么查找才能解决此问题。我试图仅显示变量不为空也不为null时的值。

在数组中分配:

$attributes [
    'glutenfree'     => getPublicClassificationsDescription($classifications, ARTICLE_GLUTENFREE),
    'lactosefree'    => getPublicClassificationsDescription($classifications, ARTICLE_LACTOSEFREE),
    'flavouringfree' => getPublicClassificationsDescription($classifications, ARTICLE_FLAVOURINGFREE),
    'corerange'      => getPublicClassificationsDescription($classifications, ARTICLE_CORERANGE),
    'engro'          => getPublicClassificationsDescription($classifications, ARTICLE_ENGRO),
    'vegan'          => getPublicClassificationsDescription($classifications, ARTICLE_VEGAN),
...
];

和许多其他属性。 我希望仅在不为空也不为null的情况下将其输出到CSV的输出。

现在我得到这样的结果:

glutenfree=,lactosefree=,flavouringfree=,corerange=,engro=,vegan=No,...

我需要的输出就像所有空/空的东西都应该消失了,但是有值的东西应该在那里。在此示例中:

vegan=No,...

例如,如果我尝试使用“ empty”或“ isset”,它将无法正常工作,并且我得到的是空白页面,没有错误。

$glutenfree = getPublicClassificationsDescription($classifications, ARTICLE_GLUTENFREE);

$attributes [
    if (!empty($glutenfree)) {
        'glutenfree'     => $glutenfree,
        'lactosefree'    => getPublicClassificationsDescription($classifications, ARTICLE_LACTOSEFREE),
        'flavouringfree' => getPublicClassificationsDescription($classifications, ARTICLE_FLAVOURINGFREE),
        'corerange'      => getPublicClassificationsDescription($classifications, ARTICLE_CORERANGE),
        'engro'          => getPublicClassificationsDescription($classifications, ARTICLE_ENGRO),
        'vegan'          => getPublicClassificationsDescription($classifications, ARTICLE_VEGAN),
        ...
    }
];

2 个答案:

答案 0 :(得分:0)

您需要在将数据推送到数组之前检查变量是否为空,像这样:

#first, create an empty array
$attributes = array();
#get lactose value
$lactose_value = getPublicClassificationsDescription($classifications, ARTICLE_LACTOSEFREE);
#check if not empty string
if ($lactose_value !='') {
  #pushing to array
  $attributes['lactosefree'] = $lactose_value;
}

可以使用foreach指令来改进此例程。

$attributes = array()
#all fields now are inside an array
$fields = [ARTICLE_GLUTENFREE=>'glutenfree', ARTICLE_LACTOSEFREE=>'lactosefree',
          ARTICLE_FLAVOURINGFREE=>'flavouringfree', ARTICLE_CORERANGE=>'corerange' ,
          ARTICLE_ENGRO=>'engro', ARTICLE_VEGAN=>'vegan' ];
#iterating
$foreach($fields as $key=>$field) {
  #getting the value
  $arr_value = getPublicClassificationsDescription($classifications, $key);
  #check if not empty string
  if ($arr_value !='') {
    $attributes[$field] = $arr_value;
  }
}

谢谢Dont Panic的贡献。 感谢mickmackusa的修订。

答案 1 :(得分:0)

最简单的解决方案(就像对现有代码进行最少的修改一样简单)

$attributes = array_filter($attributes);

在将数组转换为字符串之前。