Php Can';t使字符串数变为浮点数或整数

Php Can';t使字符串数变为浮点数或整数,php,Php,我试图用PHP解析csv文件,只要我将数字保留为字符串,一切都正常。但是,由于我想对嵌套数组的值求和,所以需要它们是数字 我需要修正三个值: $column[1]是成本并包含小数(例如20.30) $column[2]是点击次数(例15) $column[3]是转换(例3) 如果我尝试对值使用floatval()或intval(),它们将返回0 示例:$cost=intval($column[1]) 我在另一个线程中看到,他们使用trim()或ltrim()来清除值。所以我在我的号码上试过了

我试图用PHP解析csv文件,只要我将数字保留为字符串,一切都正常。但是,由于我想对嵌套数组的值求和,所以需要它们是数字

我需要修正三个值:

  • $column[1]是成本并包含小数(例如20.30)
  • $column[2]是点击次数(例15)
  • $column[3]是转换(例3)
如果我尝试对值使用floatval()或intval(),它们将返回0

示例:$cost=intval($column[1])

我在另一个线程中看到,他们使用trim()或ltrim()来清除值。所以我在我的号码上试过了

  • $cost=intval(trim($column[1])
  • $clicks=intval(trim($column[2])
  • $conversions=intval(trim($column[3])
但这只给了我数字的第一个数字,所以我得到了这个

  • 成本:2(而不是20.30)
  • 点击:1次(而不是15次)
  • 转换:3(实际上是正确的)
我试着用“.”和“.”作为小数

我真的搞不懂这个。非常感谢您对我的任何帮助

结构:
将数字格式与floatval一起使用

$cost = floatval(column[1]);
$cost = number_format($cost, 2);

您可以按如下方式键入强制转换值:

$cost = (double) $column[1];
$clicks = (int) $column[2];
$conversions = (int) $column[3];

如果您希望格式化double,请执行以下操作:

$cost = number_format($column[1], 2);
编辑:谢谢你的var\u转储,试试这个

$cost = (double) $column[0][1];
$clicks = (int) $column[0][2];
$conversions = (int) $column[0][3];

您正在尝试与2D数组进行交互,就好像它是一维的。

如果
$column[1]
的值是
“20.30”
您可以简单地将其用于计算,因为当您进行关节炎计算时,php会自动将字符串转换为数字。 例:

您还可以使用类型转换,如:

$a=(float)$column[1]*1;
以此类推。

我可能错了……在这种情况下,我显然有赌博问题……但我相当肯定,您试图在实际的
数组()而不是
字符串上进行所有这些转换

打印输出显示4个不同的数组,每个数组都有键/值对。所有这些都链接到
$column

如果我不得不猜测,我不应该在堆栈交换上这样做,我会说试试这个:

$column[1][1]
而不是你现在所拥有的

$column[1]

我已经起床很长时间了,所以这里需要考虑一些细节。

你能发布var_dump($column)的结果吗?看起来你的值中可能有一些不可见的字符(例如null)。。。你能对一个值进行十六进制转储吗?lol询问,你就会收到。如果
string(11)“33.86”
是5个可见字符,但长度为11个字节,那么字符串中肯定有不可见的字符,您可以编辑您的帖子并将其转换为代码格式,方法是选择所有内容并点击
CTRL+K
。。。尝试执行
str\u替换(“0x00”,“'.$value)
以删除任何
null
字节。。。。对一个值执行十六进制转储将确认不可见字符的细节显示我找到并删除隐藏字符了吗?我也尝试过了,但那只会给我带来什么(“”)。是的。我用一个Drupal模块来实现这一点,效果非常好。如果我这样做,它们都会变成0。var_转储什么($column[1]);给你?所有的成本值都是字符串。。。字符串(11)“31.32”字符串(11)“99.12”字符串(11)“33.86”您正在尝试计算整个列。您需要以二维数组的形式与数据交互$列[0][1]等。请参阅我的编辑。如果类型转换对他不起作用,这可能是导致问题的唯一原因:D很好地发现了这一点。$column[1][1]实际上让我得到了成本数字的第一位数字。所以如果我做$cost=$column[1][1]$列[1][2]我得到了两个第一位数字:Swell,奇怪的是,它与[1]和[2]=“31.32”和[2]=“1”的实际第一位数字吻合,这将给出31个任意方向的lol,这当然仍然是奇怪的,因为唯一的意义是只有这两个数字的第一位被检索到哈哈
$column[1][1]
$column[1]