【问题标题】:Array Keys do not add up but makes keys go from 0 to 9 3 times数组键不累加但使键从 0 变为 9 3 次
【发布时间】:2026-01-03 21:45:02
【问题描述】:

当我将 4 个数组合并为 1 个数组时,它使键 [0] 到 [9] 4 次,而不是从 [0] 到 [34]。

我正在使用的文件是一个 .txt 文件,其内容如下(只有 4 行随机文本):

gghondxs
vishfgfh
魔术师
bvmdomvb

<form method="post" action="index.php" enctype="multipart/form-data">
    <input class="file-choise" name="file" type="file" />
    <input class="upload-button" type="submit" value="Upload Bestand" />       
</form>

    $file = fopen($_FILES['file']['tmp_name'], "rb");
    $linearray = array();
    $workingarray = array();
    while(! feof($file)) {
        $line = fgets($file);
        echo "$line<br>";
        $linearray[] = (str_split("$line"));
    }

    $workingarray[] = array($linearray,"endline");
    print_r($workingarray);

我得到的输出如下;

数组 ( [0] => 数组 ( [0] => 数组 ( [0] => 数组 ( [0] => g [1] => g [2] => h [3] => o [4] => n [5] => d [6] => x [7] => s [8] => [9] => ) [1] => 数组 ( [0] => v [1] => i [2] => s [3] => h [4] => f [5] => g [6] => f [7] => h [8] => [9] => ) [2] => 数组 ( [0] => m [1] => a [2] => g [3] => i [4] => e [5] => d [6] => h [7] => v [8] => [9] => ) [3] => 数组( [0] => b [1] => v [2] => m [3] => d [4] => o [5] => m [6] => v [7] => b [ 8] => [9] => ) [4] => 数组 ( [0] => ) ) [1] => endline ) )

我希望它看起来像这样

数组 ( [0] => 数组 [0] => g [1] => g [2] => h [3] => o [4] => n [5] => d [6] => x [7] => s [8] => v [9] => i [10] => s [11] => h [12] => f [13] => g [14] => f [15] => h [16] => m [17] => a [18] => g [19] => i [20] => e [21] => d [22] => h [23] => v [24] => [25] => b [26] => v [27] => m [28] => d [29] => o [30] => m [31] => v [32] => b [33] => [34] => 结束线))

有人可以帮我实现吗?

谢谢

【问题讨论】:

  • 你有文件的例子吗?
  • @Sephedo,你是什么意思?我复制到帖子中的文件中的所有内容。
  • 我的意思是你上传的文件。
  • 对不起,完全忘记了,现在正在努力。

标签: php arrays array-key


【解决方案1】:
<?php
$file = fopen($_FILES['file']['tmp_name'], "rb");

$linearray = array();
$workingarray = array();

while(! feof($file)) {
    $line = fgets($file);

    echo "$line<br>";

    $line = str_split(trim($line));

    $linearray = array_merge($linearray, $line);
    // $linearray = array_merge($linearray, $line, array("endline")); Include endline after each actual line.
}

$workingarray[] = $linearray;

var_dump($workingarray);

【讨论】:

  • 有效!但是数字 9/19/29/39/40 仍然是空的吗?你知道这是怎么回事吗?
  • 这是因为文件中的换行符
  • 我已经编辑了我的答案以添加 $line = str_split(trim($line));删除了换行符
【解决方案2】:
$workingarray = call_user_func_array('array_merge', $workingarray);

【讨论】:

    【解决方案3】:

    你可以使用数组合并吗?

    $linearray[] = array_merge( $linearray, str_split("$line") );
    

    http://php.net/manual/en/function.array-merge.php

    【讨论】:

      【解决方案4】:

      只需在现有代码中添加一行:-

      $workingarray[] = array($linearray,"endline");
      // This is a new line
      $workingarray = array_values($workingarray);    
      print_r($workingarray);
      

      array_values() 将在您的数组中重新生成从 0 开始的键索引。

      【讨论】:

        最近更新 更多