PHP: проверить, если 0? - PullRequest
3 голосов
/ 28 мая 2010

Я использую класс, который возвращает мне значение определенной строки и ячейки электронной таблицы Excel. Чтобы создать массив из одного столбца, я подсчитываю строки, а затем перебираю это число с помощью цикла for(), а затем с помощью $array[] = $value устанавливаю значение объекта увеличивающегося массива.

Это прекрасно работает, если ни одно из значений в ячейке не равно 0. Класс возвращает мне число 0, так что это не имеет ничего общего с классом, я думаю, что это то, как я перебираю строки и затем присваиваю их массиву ... Я хочу перенести значение 0, потому что я создаю графики с данными потом, вот код, который у меня есть.

// Get Rainfall
$rainfall = array();
for($i=1;$i<=$count;$i++)
{
    if($data->val($i,2) != 'Rainfall') // Check if not the column title
    {
        $rainfall[] = $data->val($i,2);
    }
}

Для вашей информации $data - это объект таблицы Excel, а метод $data->val(row,col) - это то, что возвращает мне значение. В этом случае я получаю данные из столбца 2.

Снимок экрана электронной таблицы

Ответы [ 4 ]

4 голосов
/ 28 мая 2010

Вы пробовали array_push ()?

array_push($rainfall, $data->val($i,2));
3 голосов
/ 28 мая 2010

Я бы использовал здесь строгое сравнение с оператором не идентичным вместо использования оператора не равно:

if($data->val($i,2) !== 'Rainfall')

Если $data->val($i,2) является целым числом и вы используете ==, то обе стороны будут приведены к целым числам, что даст вам результат, что все целые числа будут работать так, как вы ожидаете, кроме нуля. Вот краткое изложение разницы между == и === при сравнении строки «RainFall» с нулем:

0 == "RainFall" : true
0 != "RainFall" : false
0 === "RainFall" : false
0 !== "RainFall" : true
1 голос
/ 28 мая 2010

Я думаю, что массив обрабатывает 0 как false, что может объяснить, что он не входит в массив. Будет ли что-то вроде этой работы (если вы используете целые числа)?

(int)($data->val($i,2));

или

(float)($data->val($i,2);)
0 голосов
/ 28 мая 2010

Проблема заключается в операторе if. Вы пытаетесь сравнить строку с целым числом, которое согласно документации PHP будет типизировать оба целых числа.

Если вы сравниваете число со строкой или сравнение включает числовые строки, то каждая строка преобразуется в число, и сравнение выполняется численно. Эти правила также применяются к оператору switch. Преобразование типов не происходит, когда сравнение === или! ==, так как это включает сравнение как типа, так и значения.

Вы можете прочитать больше здесь http://php.net/manual/en/language.operators.comparison.php.

Обновление: оператор if не будет работать в случае 0, потому что (int)"Rainfall" будет по типу вставлен в 0 PHP, в результате чего оператор будет if (0 != 0) { ... }.

Если $i представляет номер строки, почему бы вам не начать с 2 вместо 1?

...