2

身份管理系统(基于 SAML2.0)向我传递了一个数组,该系统在数组中为我提供了一组用户属性。

身份提供者配置了这些数据的结构,我正在为这家(更大的公司)提供服务。改变我接收这个数组的方式不在我的控制范围内。

数组以这种形式与我一起到达(这就是我看到print_r的数组):

Array
(
[http://longurl/surname] => Array ([0] => Smith)
[http://longurl/firstname] => Array ([0] => John)
);

如您所见,这个数组数组的键是一个 URL(我相信他们有充分的理由?!)。但是,如果我尝试像这样使用这个数组:

echo 'Hello Mr. '.$SAMLDATA[http://longurl/surname][0];

这不好,因为冒号不是变量内的有效字符(或者我读过)。

逃脱角色似乎不起作用,知道我能在这里做什么吗?非常感谢。

4

1 回答 1

1

由于 PHP 的非整数数组键是字符串,因此必须将它们引用为字符串。如果你不引用它们,PHP 将发出E_NOTICE关于未定义的常量,假设你打算使用字符串代替常量,并且如果你尝试使用带有冒号的数组键,如那些 URL,它可能会导致致命的语法错误。

因此,要解决您的问题,您实际上只需要正确引用数组键,如下所示:

echo 'Hello Mr. '.$SAMLDATA['http://longurl/surname'][0];

请注意,唯一可以引用字符串数组键的情况是在双引号字符串内插值时。例如:

$str = "This double-quoted string has an $array[key] value inside it";

对于像上面这样的简单数组值,您不需要在双引号字符串中引用键。

但是,在您的情况下,您可能需要使用{}语法来访问插值字符串中的这些 URL 键之一。使用时,{}需要引用字符串数组键。一般来说,我总是建议使用{}数组和对象值的语法,因为它提高了可读性:

// When using {} enclosures, you do need to quote the key
$str = "This double-quoted string has an {$array['key']} value inside it";

此处记录了围绕上述双引号字符串中的示例的各种规则。

于 2012-11-27T02:13:31.737 回答