0

コード 1: Excel シートからデータを読み取ります。12 の異なる値が含まれています。

値は 48,600,5.3,5,1500,6000,85,30,70,30,70,14 です。

$BATTCONFIG=$objPHPExcel->getActiveSheet()->rangetoArray('C9:C20',null,true,true,true);

コード 2: FOR ループを使用して、配列 $BATTCONFIG 内のすべての VALUES を INTEGER に変換しようとしています。

$y1 = (array_values($BATTCONFIG));
var_dump(y1);
for( $i=0 ; $i<=11 ; $i++ )
{
    settype($y1[$i], "integer"); 
}
var_dump($y1);

しかし、私は望ましい出力を取得していません。すべての値を 1 として取得しています。

私の出力:

SETTYPE() の前:

 array (size=12)
 0 => 
   array (size=1)
  'C' => float 48
1 => 
array (size=1)
  'C' => int 600
2 => 
array (size=1)
  'C' => float 0.3
3 => 
array (size=1)
  'C' => int 5
4 => 
array (size=1)
  'C' => float 1500
5 => 
array (size=1)
  'C' => int 6000
6 => 
array (size=1)
  'C' => int 85
7 => 
array (size=1)
  'C' => int 30
8 => 
array (size=1)
  'C' => int 70
 9 => 
array (size=1)
  'C' => int 30
10 => 
  array (size=1)
  'C' => int 70
 11 => 
array (size=1)
  'C' => float 14

SETTYPE() の後:

array (size=12)
0 => int 1
1 => int 1
2 => int 1
3 => int 1
4 => int 1
5 => int 1
6 => int 1
7 => int 1
8 => int 1
9 => int 1
10 => int 1
11 => int 1

私を助けてください 。グラフをプロットするには、これらの整数値が出力として必要です。前もって感謝します。

4

1 に答える 1

1

$ y1にその値を入力すると、別のエラーが発生するはずです。期待どおりに機能するこの単純化された例を想像してみてください。

$arr = array('1','2','3','4','5');
for ($i = 0; $i < 5; $i++) {
    settype($arr[$i], "integer");
}

var_dump($arr);

何があなたに与えるのか:

array(5) {
  [0] =>
  int(1)
  [1] =>
  int(2)
  [2] =>
  int(3)
  [3] =>
  int(4)
  [4] =>
  int(5)
}

質問を編集した後(変換前に$ y1があります)、$y1が多次元配列であることに気付いていないことがわかります。次のようなコードに変更する必要があります。

$ints = array(); 
foreach($y1 as $index => $cell) {
    $values = array_values($cell);
    $ints []= intval(round($values[0]));
}

var_dump($ints);

また、settype()関数を使用してfloatをintに変換しようとしていることにも注意してください。私はround()そのために使用します

于 2013-03-05T12:22:02.967 に答える