массив php in_array странность - PullRequest
1 голос
/ 14 июля 2009

из всех языков, которые я знаю, я самый слабый в php ...

У меня есть скрипт ... который берет файл CSV и делает с ним что-то ... довольно простой.

проблема, с которой я столкнулся: in_array ('username', $ headers) ... возвращает ноль ... в то время как... print_r ($ заголовки); показывает, что имя пользователя является первой записью в CSV.

мысли? ошибки, которые я мог совершить?

ТИА

код здесь

/// Turn the string into an array
            $rows = explode("\n", $this->raw_data);

            /// First row includes headers
            $headers = $rows[0];
            $headers = explode($this->delimiter, $headers);

            /// Trim spaces from $headers
            $headers = array_map('trim', $headers);

            /// Check that there are no empty headers. This can happen if there are delimiters at the end of the file
            foreach($headers as $header){

                    if(!empty($header)){
                            $headers2[] = $header;
                    }
            }
            $headers = $headers2;

            if(! in_array('password', $headers)){
                    /// Add password column for generated passwords
                    $headers[] = 'password';
            }
            /// Add status column to the headers
            $headers[] = 'status';

            $this->headers = $headers;

            /// Check that at least username, name and email are provided in the headers
            if(!in_array('username', $headers) ||
               !in_array('name', $headers) ||
               !in_array('email', $headers)){

               echo "error\n";   
               return false;
            }

Ответы [ 3 ]

2 голосов
/ 14 июля 2009

Вы можете использовать встроенную функцию str_getcsv(). Попробуйте заменить $headers назначение переменной на

$headers = str_getcsv($rows[0], $this->delimiter);

Затем найдите нужное значение (столбец) и выполните цикл по остальной части $rows, используя ту же функцию str_getcsv(), чтобы получить нужные вам соответствия.

Возможно, вы захотите использовать функцию file() для захвата файла в массиве, который также начинается с новой строки.

0 голосов
/ 14 июля 2009

Я не вижу кода, который устанавливает $ headers2 в качестве массива. Первое присваивание этой переменной теряется после второго присваивания, которое превращает ее в массив?

0 голосов
/ 14 июля 2009

Отметьте первые три функции в этом списке . Ваша проблема может возникнуть по нескольким причинам. Начните с устранения ненужного анализа с помощью встроенной функции CSV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...