如果您因為某些原因需要從字串而不是檔案指標取得一行一行資料,請嘗試:
<?php
function string_gets(string $source, int $offset = 0, string $delimiter = "\n"): ?string
{
$len = strlen($source);
if ($len < $offset) {
return null;
}
if ($len === $offset) {
return null;
}
$delimiter_pos = strpos($source, $delimiter, $offset);
if ($delimiter_pos === false) {
return substr($source, $offset);
}
return substr($source, $offset, ($delimiter_pos - $offset) + strlen($delimiter));
}
?>
(我有一個大約 16GB 的字串在記憶體中需要逐行處理,但如果我嘗試使用 explode("\n",$str);,則會發生記憶體配置崩潰(在 32GB RAM 系統上),所以想出了這個方法.. 有趣的是,fgets() 似乎比在 PHP 的記憶體中執行更快,不過。PHP 7.3.7)