PHP:有条件地添加数组成员

PHP:有条件地添加数组成员,php,arrays,conditional,Php,Arrays,Conditional,在上面的示例中,如果$listablemeta或$nonlistmeta为空,我想省略整行。 假设$listablemeta为空。那么数组将是: $headers=array( $requestMethod." /rest/obj HTTP/1.1", "listable-meta: ".$listablemeta, "meta: ".$nonlistmeta, 'accept: */*', ); 现在我可以设置一个条件isempty(),并

在上面的示例中,如果$listablemeta或$nonlistmeta为空,我想省略整行。 假设$listablemeta为空。那么数组将是:

$headers=array(
     $requestMethod." /rest/obj HTTP/1.1",
     "listable-meta: ".$listablemeta,
     "meta: ".$nonlistmeta,
     'accept: */*',
      );
现在我可以设置一个条件isempty(),并相应地设置数组,但是如果我想构造一个数组,比如说20个不同的值,如果每行上的变量不是空的,那么每个值只设置一个值,那么还有其他方法可以设置数组声明中的条件吗?如果没有,还有什么办法解决这个问题


谢谢

在选项数组中循环,如果该值不为空,则将其添加到标题数组中:

$headers=array(
     $requestMethod." /rest/obj HTTP/1.1",
     "meta: ".$nonlistmeta,
     'accept: */*',
      );

我不知道如何在声明中这样做,但是一个简单的helper函数很可能会做到这一点:

$headers = array(
  $requestMethod." /rest/obj HTTP/1.1",
  "meta: ".$nonlistmeta,
  'accept: */*'
);

$items = array(
  "item1" => "",
  "item2" => "foo"
);

foreach ($items as $key => $val) {
  if ($val != "") {
    $headers[] = $val; // only 'foo' will be passed
  }
}

您不能在array子句中使用任何有助于实现此目的的条件,但这应该适合您的需要:

如果要传递给数组的头如下所示:

function array_not_empty($values){
  $array = array();
  foreach($values as $key=>$value){
    if(!empty($value)) $array[$key] = $value;
  }
  return $array;
}
构建这些变量的键/值数组:

$requestMethod = 'GET';
$listablemeta = ''; // This shouldn't be in the final result
$nonlistmeta = 'non-listable-meta';
请注意,如果该值没有像
requestMethod
中那样的键,只需在那里输入一个数值即可。然后循环它们并构建最终阵列:

$headers = array(
               0 => $requestMethod." /rest/obj HTTP/1.1",
               'listable-meta' => $listablemeta,
               'meta' => $nonlistmeta,
               'accept', '*/*'
           );
$headers
现在应该包含如下内容:

function buildHeaders($headers) {
    $new = array();

    foreach($headers as $key => $value) {
        // If value is empty, skip it
        if(empty($value)) continue;
        // If the key is numerical, don't print it
        $new[] = (is_numeric($key) ? '' : $key.': ').$value;
    }

    return $new;
}

$headers = buildHeaders($headers);

这没有抓住要点,应该过滤的是
$headers
数组;如果
$nonlistmeta
为空,则应从
$headers
中删除该行。您的示例只是将新项添加到数组中,而数组的形式甚至不是
key:value
$headers = array(
               'GET /rest/obj HTTP/1.1',
               'meta: non-listable-meta-here',
               'accept: */*'
           );