在php中从文件读取到关联数组

时间:2012-02-13 11:25:01

标签: php

我有一个像这样的记录的文件codes.txt

USA 0233
JPN 6789
TUN 8990
CDN 2345

我想将这些文件内容读取到这样的关联数组中。

$codes["USA"] = 0233;
$codes["JPN"] = 6789;
$codes["TUN"] = 8990;
$codes["CDN"] = 2345;

这是打开文件进行编写的代码。我需要数组部分的帮助。 THKS

$myFile = "codes.txt";
$fh = fopen($myFile, 'r');
$theData = fread($fh, filesize($myFile));
fclose($fh)

3 个答案:

答案 0 :(得分:9)

这很直截了当。首先逐行阅读文件(例如,参见已经执行此操作的file函数)。然后通过在第一个空格处拆分来解析每一行(参见explode),使用第一部分作为键,第二部分作为值:

$array = array();
foreach (file($myFile) as $line)
{
    list($key, $value) = explode(' ', $line, 2) + array(NULL, NULL);

    if ($value !== NULL)
    {
        $array[$key] = $value;
    }
}

如果您的解析器需要更具体,请根据您的需要进行更改。有a lot of string functions with PHP可用于更加差异化的解析,例如sscanf正则表达式

另一种常见方法是从SplFileObject扩展,它允许将数据采集封装在迭代器中,这样您就可以更好地区分数据使用位置和数据采集位置。你可以在另一个答案中找到一个例子:

答案 1 :(得分:3)

$myFile = "codes.txt";
$fh = fopen($myFile, 'r');
$theData = fread($fh, filesize($myFile));
$assoc_array = array()
$my_array = explode("\n", $theData);
foreach($my_array as $line)
{
    $tmp = explode(" ", $line);
    $assoc_array[$tmp[0]] = $tmp[1];
}
fclose($fh)

// well the op wants the results to be in $codes
$codes = $assoc_array;

答案 2 :(得分:0)

有一种最佳方式可以做到这一点,而不是任何这些答案。您可以使用file_get_contents和array_walk函数来缩短内容。

$allCases = explode("\r\n", file_get_contents("myfile.txt")); 
$myList = array();    
array_walk($allCases, "step", $myList); 

function step($val, $key, &$arr) {
    $aCase = explode(" ", $val);
    $arr[$aCase[0]] = $aCase[1]; 
}

这样您就不需要for循环或文件处理程序。

谨防分隔符" \ r \ n"因为在这种情况下,这可能与平台有关。