PHP: in_array не возвращает true

0

У меня проблема с in_array, которая не возвращает true, даже если дубликаты находятся в массиве. Проведя некоторые исследования на этом сайте, я обнаружил, что у многих пользователей Windows есть проблемы из-за невидимых разрывов строк и т.д., Но это, похоже, не так, потому что после печати длины каждой строки она совпадает с что у меня (нет невидимых персонажей). Тем не менее, мой код, похоже, не в состоянии сопоставить новые значения с тем, что уже находится в массиве:

$XMLName = "file.xml";
$XMLFile = simplexml_load_file($XMLName);

$categories = array();
$i = 0;

foreach($XMLFile as $ReadFile) {
    $cat = $ReadFile->CategoryName;

    $IsInArray = in_array($cat, $categories);

    if($IsInArray == FALSE) {
        $categories[$i] = $cat;
        $i++;
    }
}

foreach($categories as $category) {
    echo $category . "<br />";
}

Кто-нибудь знает, почему это так?

  • 0
    Является ли $cat массивом? Я сомневаюсь.
  • 0
    Я так не думаю (ограниченный опыт кодирования здесь, хе-хе), но разве $ cat не должна быть строкой, а затем вторым аргументом in_array массива?
Показать ещё 3 комментария
Теги:
simplexml

1 ответ

0
Лучший ответ

попробуйте заменить строку:

$cat = $ReadFile->CategoryName;

с этим:

$cat = trim($ReadFile->CategoryName->__toString());

и как @Jamil сказал, что вам лучше заменить:

$categories[$i] = $cat; $i++;

с просто

$categories[] = $cat;

  • 0
    Это сработало, спасибо большое! Это был вопрос разрыва строки в конце концов?
  • 0
    Я понятия не имею, что это было на вашей стороне и с вашими данными :-), во-первых, я сделал код, чтобы убедиться, что var $ cat является строкой (а не simpleXMLElement), а затем обрезать - чтобы удалить пробелы, если таковые существуют на ребре.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню