我有这段代码
$arr = array(
"0"=>"http://site.com/somepage/param1/param2/0",
"1"=>"http://site.com/somepage/param1/param2/1",
"thispage" => "http://site.com/somepage/param1/param2/2",
"3"=> "http://site.com/somepage/param1/param2/3"
);
foreach ($arr as $k=>$v) {
if ($k == "thispage") {
echo $k." ";
}
else {
echo '<a href="'.$v.'">'.$k.'</a> ';
}
}
令人惊讶的是,第一个元素"0"=>"http://site.com/somepage/param1/param2/0",
没有创建链接,(其他元素工作正常)
如果在其他内容上替换第一个元素键0
,例如4
,则现在创建了链接。有什么问题?
答案 0 :(得分:5)
这是因为0 == "thispage"
而第一个键是0
。要了解有关此内容的更多信息,请查看有关Type Juggling。
使用===
(“与”相同“)代替==
(”等于“),因为0
等于到{{1 },但不是相同的。
"thispage"
:
==
获取$key
integer
值
0
0 == "thispage"
投射到"thispage"
integer
,即0 == 0
如果您使用true
:
===
获取$key
integer
值
0
0 === "thispage"
的类型与0
(integer
)的类型不同("thispage"
),因此结果为string
答案 1 :(得分:2)
执行:
if ($k === "thispage")
你必须使用相同的比较运算符 ===
,因为相等的比较运算符在这里无济于事,因为
转换为数字的如果您将数字与字符串进行比较或比较涉及 数字字符串,然后每个字符串转换为一个数字和 比较用数字表示。
thispage
将返回0
,因此如果使用相等的比较运算符==
,则if语句将匹配。当您进行相同的比较===
时,如果类型不匹配,则返回false。
您可以阅读有关比较运算符here的信息。
答案 2 :(得分:2)
这就是你做错了。
if ($k === "thispage") {
echo .$k." ";
}
答案 3 :(得分:1)
试试这个:
if ($k === "thispage") {
echo $k." ";
}
答案 4 :(得分:1)
http://us.php.net/manual/en/language.types.array.php:
键可以是整数或字符串。 如果一个键是整数的标准表示,它将被解释为(即“8”将被解释为8,而“08”将被解释为“08”)。
因此,在您的情况下,Stings "1", "2" and "3"
被视为整数。
要解决此问题,请使用检查类型和值的===
运算符。
答案 5 :(得分:0)
您看到的结果的原因是您使用的比较运算符。 ==有时候太不精确了,可能导致像这样的奇怪事情。使用===将比较准确性的值,并防止出现问题。
所以:
foreach ($arr as $k=>$v) {
// this is the important thing
if ($k === "thispage") {
echo $k." ";
}
else {
echo '<a href="'.$v.'">'.$k.'</a> ';
}
}