PHP问题,我确信这有一个简单的解决方案,只是看不到它

时间:2010-09-01 03:07:54

标签: php xml string

我是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

3 个答案:

答案 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")))