PHP:有条件地添加数组成员
在上面的示例中,如果$listablemeta或$nonlistmeta为空,我想省略整行。 假设$listablemeta为空。那么数组将是: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(),并
$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: */*'
);