Проблема PHP, я уверен, что это простое решение, просто не вижу - PullRequest
1 голос
/ 01 сентября 2010

Я новичок в php, и этот маленький жучок съел мой день, возможно, это связано с каким-то свойством 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"] напечатает 'некоторую строку'

так почему бы не распечатать $xmlFields["brandName"]?

Заранее спасибо, Язан

Ответы [ 3 ]

7 голосов
/ 01 сентября 2010

Вы не можете связать ИЛИ, как это.try

    if($fieldName == "brandName" || $fieldName =="oeNumber" || $fieldName =="articleId" || $fieldName =="quantityPerPackingUnit" || $fieldName == "attrName") {

Как сказал Deceze, гораздо лучше при поиске в массиве использовать

if (in_array($fieldName, array("brandName", "oeNumber", "articleId", "quantityPerPackingUnit", "attrName")))

Я знаю, что некоторые языки допускают такую ​​конструкцию, но php не является одним из них..

4 голосов
/ 01 сентября 2010

Следующее выражение

$fieldName == "brandName" || "oeNumber" || "articleId" || "quantityPerPackingUnit" || "attrName"

анализируется как

(
  (
    (
      ($fieldName == "brandName") || ("oeNumber")
    ) || ("articleId")
  ) || ("quantityPerPackingUnit")
) || ("attrName")

Обратите внимание, что ваша проверка на равенство отделена от других проверок.В этом случае выражение всегда оценивается как true.

. Для этого случая можно использовать массив:

in_array($fieldName, array("brandName", "oeNumber", "articleId", "quantityPerPackingUnit", "attrName"));
3 голосов
/ 01 сентября 2010

Попробуйте это как более короткую версию ответа Изногуда:

if (in_array($fieldName, array("brandName", "oeNumber", "articleId", "quantityPerPackingUnit", "attrName")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...