我正在循环这样的二维数组:
if (!empty($aka)) {
foreach ($aka as $ak) {
if($ak["lang"]=="es") {
$sptitle=$ak["title"];
}
}
}
非常简单。如果数组($ aka)不为空,我循环通过它,当它发现“lang”索引等于“es”时,我只是在$ sptitle中保存该索引的“title”值。
问题是数组($ aka)包含大量信息,有时没有“lang”索引......我收到此错误:注意:未定义的索引:lang。
我该如何解决这个问题?
这是数组的摘录,可以帮助您理解。请注意,[1]没有[lang]索引,但[2]确实有:
[1] => Array
(
[title] => "The Lord of the Rings: The Motion Picture"
[year] => ""
[country] => "USA"
[comment] => "promotional title"
)
[2] => Array
(
[title] => "Señor de los anillos: La comunidad del anillo, El"
[year] => ""
[country] => "Argentina"
[comment] => "Chile, Mexico, Peru, Spain"
[lang] => "es"
)
谢谢!
答案 0 :(得分:15)
只需使用isset进行测试,例如
if (!empty($aka)) {
foreach ($aka as $ak) {
if(isset($ak["lang"]) && ($ak["lang"]=="es")) {
$sptitle=$ak["title"];
}
}
}
如果你不知道布尔运算符如何&&可以短路,如果第一个操作数为假,则不会评估第二个操作数。在第二个操作数中对它进行操作之前,你经常会看到这个习惯用于检查某些东西的可用性。
您也可以使用array_key_exists('lang',$ aka)而不是isset,但它的语义略有不同 - 如果元素设置为null
,它将返回true,其中isset将返回false。
有趣的是,isset is at least twice as fast as array_key_exists,可能是由于它是一种语言结构而不是常规的函数调用。
答案 1 :(得分:0)
使用时会出错:
if (@$ak['lang'])
我真的很想念我们仍然不能像1那样进行2次检查
if ($ak['lang'])
它是关于PHP的美妙事物之一,我只是没有看到警告是否在像PHP这样的瞬态脚本语言中初始化数组键的目的。
我不确定PHP的开发人员会在哪里使用它。就个人而言,我有点担心他们会将PHP变成其他东西。只是不管它。太棒了。
答案 2 :(得分:0)
if (@!empty($aka)) {
foreach ($aka as $ak) {
if($ak["lang"]=="es") {
$sptitle=$ak["title"];
}
}
}
or
if ( @$_POST['value'] == 'yes' )
{
state;
}
在大多数情况下,通过使用 @ 符号.............
注意到了这一点