[英]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.