Domanda

Sto usando una classe che mi restituisce il valore di una particolare riga e la cella di un foglio Excel. Per costruire una matrice di una colonna Sto contando le righe e quindi scorrendo quel numero con un ciclo for() e quindi utilizzando la $array[] = $value per impostare il valore incrementale dell'oggetto array.

Questa grande opera se nessuno dei valori in una cella sono 0. Le classi rendimenti di me un certo numero 0 quindi è niente a che fare con la classe, penso che sia il modo in cui sto scorrendo le righe e poi assegnare alla matrice ... voglio portare a termine il valore 0 perché sono grafici che creano con i dati dopo, ecco il codice che ho.

// 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);
    }
}

Per le tue informazioni $data è l'oggetto foglio di calcolo excel e il metodo $data->val(row,col) è quello che mi restituisce il valore. In questo caso sto ottenendo i dati dalla colonna 2.

Schermata di foglio di lavoro

È stato utile?

Soluzione

Si è provato un array_push ()?

array_push($rainfall, $data->val($i,2));

Altri suggerimenti

I userebbe un confronto rigoroso con la operatore non identico qui invece di utilizzare l'operatore non è uguale a:

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

Se $data->val($i,2) è un numero intero e si utilizza == entrambi i lati saranno gettati a numeri interi che darebbe il risultato che tutti i numeri interi avrebbero funzionato come ci si aspetta tranne che per lo zero. Ecco una sintesi della differenza tra == e === quando si confrontano la stringa "pioggia" con lo zero:

0 == "RainFall" : true
0 != "RainFall" : false
0 === "RainFall" : false
0 !== "RainFall" : true

Credo che l'array sta trattando il 0 come falso, il che potrebbe spiegare che non va nella matrice. Sarebbe qualcosa di simile a questo lavoro (se si utilizza numeri interi)?

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

o

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

Il problema sta nel l'istruzione if. Stai cercando di confrontare una stringa con un numero intero, che secondo la documentazione di PHP si typecast sia per interi.

  

Se si confronta un numero con una stringa o il confronto coinvolge stringhe numeriche, poi ogni stringa viene convertito in un numero e il confronto eseguito numericamente. Queste regole valgono anche per l'istruzione switch. La conversione di tipo non avviene quando il confronto è === o! == in quanto questo comporta il confronto del tipo, così come il valore.

Si può leggere di più qui http://php.net/manual/ it / language.operators.comparison.php .

Aggiornamento:. L'istruzione if non funziona nel caso di 0 perché (int)"Rainfall" sarà da typecasted in 0 da PHP causando la dichiarazione di essere if (0 != 0) { ... }

Se $i rappresenta il numero di riga, perché non si inizia dal 2 al posto di 1?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top