Php 返回数组中第一个单元格大小而不是整个数组大小的计数

Php 返回数组中第一个单元格大小而不是整个数组大小的计数,php,Php,我有一个数组$all_orders,其中包含数组,$temp_数组包含分解由8单词组成的字符串后的每次迭代,$handle由文件中的3行组成: while(!feof($handle)) { $order=fgets($handle); $temp_array=explode(",",$order); array_push($all_orders,$temp_array); } 现在,当我尝试计算$all_orders数组元素(应该是3)时,我只得到8: echo count($a

我有一个数组
$all_orders
,其中包含数组,$temp_数组包含分解由
8
单词组成的字符串后的每次迭代,
$handle
由文件中的
3行
组成:

while(!feof($handle))
{
  $order=fgets($handle);
  $temp_array=explode(",",$order);
  array_push($all_orders,$temp_array);
}
现在,当我尝试计算
$all_orders
数组元素(应该是3)时,我只得到8:

echo count($all_orders);// display 8
为什么我没有得到3分

编辑:

以下是我在尝试打印到数组内容时得到的结果:

Array
(
    [0] => Array
        (
            [0] =>

        )

    [1] => Array
        (
            [0] =>

        )

    [2] => Array
        (
            [0] => 1
            [1] => 1
            [2] => chaine.com
            [3] => chaine
            [4] => chaine
            [5] => chaine
            [6] => chaine
            [7] => chaine

        )

    [3] => Array
        (
            [0] =>

        )

    [4] => Array
        (
            [0] => 2
            [1] => 1
            [2] => chaine@fudd.com
            [3] => chaine.
            [4] => chaine
            [5] => chaine
            [6] => chaine
            [7] => chaine

        )

    [5] => Array
        (
            [0] =>

        )

    [6] => Array
        (
            [0] => 3
            [1] => 2
            [2] => chaine@bunny.com
            [3] => chaine.
            [4] => chaine
            [5] => chaine
            [6] => chaine
            [7] => chaine

        )

    [7] => Array
        (
            [0] =>
        )

)

您有两个问题之一:

  • 您的文件中有一些空白行
  • PHP被行尾的样式弄糊涂了(例如在一个只使用
    \n
    的平台上使用
    \n
不管实际问题是什么,这都应该解决它:

while(!feof($handle)) {
  // Evaluating the trimmed line as a bool will effectively skip blank lines
  if (!trim($order = fgets($handle))) continue;
  $all_orders[] = explode(',', $order);
}

您应该
var\u dump($all\u orders)
,您可能会看到原因。这里没有人能在没有看到文件的情况下真正告诉你——尽管从上面的代码来看,如果
$handle
描述的文件中有8行,或者
$all_orders
在开始阅读之前已经有了一些元素,那么你只能得到8行。您可以将该循环的全部内容缩短为
$all_orders[]=fgetcsv($handle)
txt文件正好包含3行扫描,您可以添加打印($all_订单);在回显和显示结果之前,我无法在命令行中复制和粘贴结果,但是,您的建议在数组中显示8个单元格,其中一些单元格如下:
[0]=>数组([0]=>)
。这是为5个单元格显示的,这就是为什么我一直得到数组大小为8的原因,但这很奇怪。@Malek它正好包含3行数据-它是否包含任何空行?如果你
var\u dump($all\u orders),你会看到什么?您可以通过将输出转储到文件中来复制/粘贴它,将
>temp.txt
附加到命令末尾,并复制/粘贴将在此处创建的
temp.txt
文件的内容。Thanx man,这已修复了它,您能解释一下继续是为了什么吗?无论如何,thanx需要很多帮助,这就像sharm一样。当
trim(fgets())
的结果计算为
FALSE
时,就会发生
continue
。因此,实际上,这将是空行(空字符串),或者如果
fgets()
返回
FALSE
,尽管如果文件中包含的一行仅为
0
,也会导致问题-仅为该字符。它只是跳到下一个迭代,这样
$all_orders
就不会受到空行的影响。如果你想跳过第一行,为了安全起见,我会做
$loop=TRUE;while($loop)if(trim(fgets($handle))$loop=FALSE在主循环之前。这会一直调用
fgets()
,直到它找到一行包含数据的行,然后中断-因此,当您到达主循环时,第一行将被有效地跳过。注意:
如果PHP在Macintosh计算机上读取文件或由Macintosh计算机创建的文件时无法正确识别行尾,启用自动检测结束运行时配置选项可能有助于解决问题。