如您所知,headers_list()
- PHP函数返回如下数组:
Array
(
[0] => Content-type: text/html; charset=utf-8
[1] => key: value
[2] => key2: value2
)
一般情况下(或者使用此示例),如何使用数组值中的“键”构建新数组?例如,上面的数组变为:
Array
(
['Content-type'] => text/html; charset=utf-8
['key'] => value
['key2'] => value2
)
这可能是非常基本的,但我还是初学者:)
答案 0 :(得分:2)
答案 1 :(得分:1)
这应该有效:
$headers = header_list();
foreach($headers as $header){
// split each header by ':' and assign them to $key and $value
list($key, $value) = explode(':', $header, 2); // limit the explode to 2 items.
// add trimed variables to the new array
$new_headers[trim($key)] = trim($value);
}
$key
的修剪可能不是很重要,但实际上是值,因为你会删除':'之后的空格。
答案 2 :(得分:1)
foreach($headers as $v) {
list($name,$val) = explode(': ',$v);
$newArray[$name] = $val;
}
// $newArray is your requested array.
答案 3 :(得分:1)
$headers = header_list();
$keyed_headers = array();
foreach ($headers as $header) {
$break = explode(': ', $header, 2);
$keyed_headers[$break[0]] = $break[1];
}
<强>更新强>
一时兴起,我决定使用类来解决这个问题 MoarAwesome TM 。这就是结果:
// definition
class HeaderArray extends ArrayObject {
static function init() {
return new self(header_list());
}
public function get_assoc() {
$result = new self();
foreach ($this as $v) {
$b = explode(': ', $v, 2);
$result[$b[0]] = $b[1];
}
return $result;
}
}
// implementation
$headers = HeaderArray::init()->get_assoc();
答案 4 :(得分:1)
以下函数能够处理具有相同字段名称的多个标题字段并将它们组合as stipulated by the specification:
当且仅当该标题字段的整个字段值被定义为以逗号分隔的列表[即#(值)]时,具有相同字段名称的多个消息标题字段可以出现在消息中。必须可以将多个头字段组合成一个“字段名:字段 - 值”对,而不改变消息的语义,方法是将每个后续字段值附加到第一个字段,每个字段值用逗号分隔。
function getHeaderFields() {
$fields = array();
$index = array();
foreach (headers_list() as $field) {
list($name, $value) = explode(':', $field, 2);
$name = trim($name);
if (isset($index[strtolower($name)])) {
$name = $index[strtolower($name)];
} else {
$index[strtolower($name)] = $name;
}
if (isset($fields[$name])) {
$fields[$name] .= ', '.trim($value);
} else {
$fields[$name] = trim($value);
}
}
return $fields;
}
这与apache_response_headers
或其他提到的解决方案相反:
setcookie('foo', 'bar');
setcookie('bar', 'quux');
$headers = getHeaderFields();
var_dump($headers['Set-Cookie']); // string(17) "foo=bar, bar=quux"
$headers = apache_response_headers();
var_dump($headers['Set-Cookie']); // string(8) "bar=quux"
答案 5 :(得分:1)
我认为这样做会更好:如果有以下情况,你应该重新利用其余部分:&#39;在值
$hList = headers_list();
foreach ($hList as $header) {
$header = explode(":", $header);
$headers[ array_shift($header) ] = trim( implode(":", $header) );
}