/**
* 获取文件行数
* @param string $filename 文件名
* @return int
*/
function file_line(string $filename): int
{
if (!file_exists($filename)) die('文件不存在');
$n = 0;
$fp = fopen($filename, 'r');
while (!feof($fp)) {
if (fgets($fp)) ++ $n;
}
fclose($fp);
return $n;
}
/**
* 获取文件指定行内容(多行)
* @param string $filename 文件名(路径)
* @param array $lines 文件行数(多行)
* @param bool $mod 是否去除空格,默认去除
* @return array
*/
function file_content(string $filename, array $lines, bool $mod = true): array
{
if (!file_exists($filename)) die('文件不存在');
$data = [];
$n = 0;
$fp = fopen($filename, 'r');
while (!feof($fp)) {
if (!$tmp = fgets($fp)) continue;
++$n;
if (!in_array($n, $lines)) continue;
$data[] = $mod ? trim($tmp) : $tmp;
}
fclose($fp);
return $data;
}
/**
* 获取随机名字
* @param int $num 名字个数
* @param string $path_l 姓路径 注:/test/txt/lastname.txt
* @param string $path_n 名路径 注:/test/txt/name.txt
* @return array array
*/
function get_name(int $num = 1, string $path_l = './txt/lastname.txt', string $path_n = './txt/name.txt'): array
{
if ($num < 1) die('参数错误');
$data = [];
$line_l = file_line($path_l); // 姓行数
$line_n = file_line($path_n); // 名行数
// 随机行
$rand_l = [];
$rand_n = [];
for ($i = 0; $i < $num; ++$i) {
$rand_l[] = mt_rand(1, $line_l);
$rand_n[] = mt_rand(1, $line_n);
}
$data_l = file_content($path_l, $rand_l); // 获取姓
$data_n = file_content($path_n, $rand_n); // 获取名
// 组装姓名
for ($i = 0; $i < $num; ++$i) {
$data[] = $data_l[$i] . $data_n[$i];
}
return $data;
}
v(get_name(10));
依赖文件(说是违法违规):
执行结果如下: