簡體   English   中英

將分隔字符串轉換為關聯數組

[英]Convert delimited strings into an associative array

我有一個帶有這樣的記錄的文件codes.txt

USA 0233
JPN 6789
TUN 8990
CDN 2345

我想將文件的這些內容讀取到這樣的關聯數組中。

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

這是打開文件進行寫入的代碼。 我需要數組部分的幫助。 謝謝

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

這很直接。 首先逐行讀取文件(例如,查看已經執行此操作的file函數)。 然后通過在第一個空格處拆分每行來解析每一行(請參閱explode ),使用第一部分作為鍵,第二部分作為值:

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

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

如果您的解析器需要更具體,請根據您的需要進行更改。 PHP有很多字符串函數可用於更差異化的解析,例如sscanf正則表達式

另一種常見的方法是從SplFileObject擴展,它允許將數據獲取封裝在迭代器中,以便您可以更好地區分使用數據的位置和獲取數據的位置。 您可以在另一個答案中找到示例:

$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;

除了這些答案中的任何一個之外,還有一種最佳方法可以做到這一點。 您可以使用 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”,因為在這種情況下這可能取決於平台。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM