Использование PHP-функции in_array с массивом из цикла foreach

0

Я пишу некоторые значения в массив из текстового файла, разделенного запятыми, такого как...

$tokenFile  = "tokens.txt";
$tokenSet = file_get_contents($tokenFile);
$tokenValues = explode(',', $tokenSet);   

foreach($tokenValues as $value) {
        $tokens[] = "$value";
    };

И я получаю это с помощью print_r($tokens);

Array ( [0] => token1 [1] => token2 [2] => token3 )

Это все хорошо и точно, что я хочу, я думаю, но если я использую in_array для проверки одного из этих значений, я не получаю желаемых результатов.

if (in_array('token2', $tokens)) {
    echo "token found!";
};

Если я создаю массив $tokens как показано ниже, он работает нормально.

$tokens = array('token1', 'token2', 'token3')

И еще раз с print_r($tokens) я получаю..

Array ( [0] => token1 [1] => token2 [2] => token3 )

Оба массива выглядят точно так же. Что мне не хватает.

Обновление Итак, массивы разные

с var_dump Я получаю следующий массив из цикла foreach

array(4) {
  [0]=>
  string(6) "token1"
  [1]=>
  string(8) "token2"
  [2]=>
  string(8) "token3"
  }

И я получаю это от другого массива.

array(4) {
  [0]=>
  string(6) "token1"
  [1]=>
  string(6) "token2"
  [2]=>
  string(6) "token3"
  }
  • 0
    Оба массива не одинаковы. Один одномерный, а другой многомерный. Используйте цикл foreach.
  • 0
    do (с вашим массивом из файла) var_dump($tokens); Щелкните правой кнопкой мыши -> просмотрите исходный код и покажите нам, что у вас там
Показать ещё 3 комментария
Теги:
arrays

1 ответ

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

Полагаю, вы забыли про пробелы или символы \n\r. Попробуйте использовать var_dump() вместо print_r чтобы увидеть разницу в строках. И не забудьте использовать функцию trim() для удаления дополнительных символов на обоих концах строки.

$tokenFile  = "tokens.txt";
$tokenSet = file_get_contents($tokenFile);
$tokenValues = explode(',', $tokenSet);   

foreach($tokenValues as $value) {
    $tokens[] = trim($value);
};
var_dump($tokens);

Другой способ получить значения - использовать регулярные выражения.

  • 0
    Почему вы знаете, что есть еще места? Вы видели вывод var_dump() из OP?
  • 0
    Это единственный способ получить одинаковый вывод print_r и другое поведение in_array для строк, не содержащее пробелов в середине.
Показать ещё 4 комментария

Ещё вопросы

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