PHP - 从.txt文件

时间:2016-02-17 16:33:55

标签: php arrays

我的.txt文件格式如下:

    "id","dealer_id","vin","stockno",
    "1","2","3","4",
    "5","6","7","8",
    "9","10","11",12"

我的目标是将其推入一个类似的关联数组:

    "id"=>"1", "dealer_id"=>"2", "vin"=>"3", "stockno"=>"4"

我的问题是,数据循环每4个条目。在上面的例子中,我应该创建3个这样的数组:

    "id"=>"1", "dealer_id"=>"2", "vin"=>"3", "stockno"=>"4"
    "id"=>"5", "dealer_id"=>"6", "vin"=>"7", "stockno"=>"8"
    "id"=>"9", "dealer_id"=>"10", "vin"=>"11", "stockno"=>"12"

如何在PHP中实现这一点 - 如果可能的话?

4 个答案:

答案 0 :(得分:3)

这是一种方法:

<?php
$file = fopen('data.txt', 'r');
$headers = fgetcsv($file);
$result = array();
while ($row = fgetcsv($file)) {
        if (!$row[0]) continue;
        $nextItem = array();
        for ($i = 0; $i < 4; ++$i) {
                $nextItem[$headers[$i]] = $row[$i];
        }
        $result[] = $nextItem;
}
fclose($file);
var_dump($result);

这使用fgetcsv来读取文件的每个分隔行。第一行用作标题名称。然后,对于每个其他行,我们创建一个新条目并将索引与标题名称匹配。我将它设置为4,因为你有一个尾随分隔符,在末尾创建一个空条目,如果你从输入中删除了那些,你可以使用$headers的长度作为内循环。

以下是您的数据var_dump的结果:

array(3) {
  [0]=>
  array(4) {
    ["id"]=>
    string(1) "1"
    ["dealer_id"]=>
    string(1) "2"
    ["vin"]=>
    string(1) "3"
    ["stockno"]=>
    string(1) "4"
  }
  [1]=>
  array(4) {
    ["id"]=>
    string(1) "5"
    ["dealer_id"]=>
    string(1) "6"
    ["vin"]=>
    string(1) "7"
    ["stockno"]=>
    string(1) "8"
  }
  [2]=>
  array(4) {
    ["id"]=>
    string(1) "9"
    ["dealer_id"]=>
    string(2) "10"
    ["vin"]=>
    string(2) "11"
    ["stockno"]=>
    string(3) "12""
  }
}

答案 1 :(得分:0)

当然,这是可能的。

使用http://www.php.net并阅读以下功能

  • file_get_contents()函数
  • 爆炸()
  • str_replace函数()

我将提供一个简短的例子:

$file = file_get_contents('myfile.txt');
$parts = str_replace('"', '', explode(',',$file);

然后执行foreach-loop或其他操作来添加数组中的键值对。

祝你好运

答案 2 :(得分:0)

$getFileContents    = file_get_contents("demo.txt");
$explodeBr          = explode("\n", str_replace('"',"",$getFileContents));
$assocKeyStr        = array_filter(explode(",", trim($explodeBr[0])));
$otherDetails       = array_slice($explodeBr, 1, count($explodeBr));
$resultingArr       = array();
foreach($otherDetails as $indDetailStr) {
    $expDetail      = array_filter(explode(",", trim($indDetailStr)));
    $resultingArr[] = array_combine($assocKeyStr, $expDetail);
}
print_r($resultingArr);

使用的术语:

  1. file_get_contents在服务器内读取文件。

  2. explode通过划分给定的输入针形成一个数组,在您的情况下\n,

  3. array_filter回调,如果没有回传,默认情况下返回非空关联值。

  4. array_slice创建另一个数组有限且数量有限的数组。

  5. count获取数组的长度。

  6. array_combine期望两个参数具有相等长度的数组,第一个参数数组是键,第二个参数用于形成值。

答案 3 :(得分:-1)

肯定是可能的 - 即file返回文件中的所有行,foreach会让您遍历行,然后您可以使用trim,{{3} }和explode建立所需的结构。