我是php的新手,这个小小的bug一直在吃掉我的一天,也许是因为我不知道的一些php属性?
作为从xml文件中获取一些数据的一些代码的一部分(使用基于事件的Expat解析器),我有以下代码
$xmlFields;
$fieldName = "";
...............其他一些代码............
function char($parser,$data)
{
global $xmlFields, $fieldName;
if($fieldName) {
if($fieldName == "brandName" || "oeNumber" || "articleId" || "quantityPerPackingUnit" || "attrName") {
$xmlFields[$fieldName] = $data;
echo $data;
}
}
}
我尝试回复$xmlFields["brandName"]
,例如,没有打印任何内容。
1)我知道$xmlFields["brandName"]
非空,因为echo $ data实际上返回了一些内容。
2)如果我改为$xmlFields[$fieldName] = 'some string';
然后echo $xmlFields["brandName"]
将打印'some string'
那为什么不打印$xmlFields["brandName"]
?
提前致谢, Yazan
答案 0 :(得分:7)
你无法链接这样的OR。 尝试
if($fieldName == "brandName" || $fieldName =="oeNumber" || $fieldName =="articleId" || $fieldName =="quantityPerPackingUnit" || $fieldName == "attrName") {
正如Deceze所说,当你在数组中搜索时,更好的选择是使用
if (in_array($fieldName, array("brandName", "oeNumber", "articleId", "quantityPerPackingUnit", "attrName")))
我知道有些语言允许这样的构造,但php不是其中之一。
答案 1 :(得分:4)
以下表达式
$fieldName == "brandName" || "oeNumber" || "articleId" || "quantityPerPackingUnit" || "attrName"
被解析为
(
(
(
($fieldName == "brandName") || ("oeNumber")
) || ("articleId")
) || ("quantityPerPackingUnit")
) || ("attrName")
请注意,您的等式检查与其他检查是分开的。在这种情况下,表达式始终计算为true
。
您可以在这种情况下使用数组:
in_array($fieldName, array("brandName", "oeNumber", "articleId", "quantityPerPackingUnit", "attrName"));
答案 2 :(得分:3)
试试这个作为Iznogood答案的缩短版本:
if (in_array($fieldName, array("brandName", "oeNumber", "articleId", "quantityPerPackingUnit", "attrName")))