检查数组中是否存在位置值
Check If Location Value Is Present In Array
我正在编写一个脚本来解析 LinkedIn-CV。我被困在工作经验部分。目前我能够从 PDF 中提取工作经验文本。但我对位置键有疑问,因为它是可选的。
Array
(
[0] => Company 1
[1] => Software Engineer
[2] => July 2020 - Present (1 month)
[3] => Pretoria, Gauteng, South Africa //this key is optional
[4] => Company 2
[5] => CTO
[6] => September 2016 - Present (3 years 11 months)
[7] => Pretoria, South Africa //this key is optional
)
格式如下:
- 公司名称 - 必填项
- 职位名称 - 必填
- 工作时长 - 强制性
- 位置 - 可选
我试过使用 array_chunk($array, 4);
但这只有在该位置存在于数组中时才有效。
我的另一个尝试是在整个数组中搜索一个国家/地区的存在,但这很棘手,因为一些公司的标题包含国家/地区。像 MTN - 南非。
我最后一次尝试是尝试编写一个正则表达式来检查位置模式。 LinkedIn 将其解析为南非的 City, Province, Country
。但对于其他国家/地区,它解析为 City, Country
。但我没能正确地得到这个。我试过 preg_match('#\((,*?)\)#', $value, $match)
其中 $value
是当前迭代的字符串值
我想为每个工作经历创建一个数组,其中可以包含位置,也可以不包含位置。例如:
Array
(
[0] => Array
(
[0] => Company 1
[1] => Software Engineer
[2] => July 2020 - Present (1 month)
[3] => Pretoria, Gauteng, South Africa
)
[1] => Array
(
[0] => Company 2
[1] => CTO
[2] => September 2016 - Present (3 years 11 months)
[3] => Pretoria Area, South Africa
)
)
感谢您的帮助。
编辑:
主串(工作经验)
$string = 'Company 1 Software Engineer July 2020 - Present (1 month) Pretoria, Gauteng, South Africa Company 2 CTO September 2016 - Present (3 years 11 months) Pretoria Area, South Africa';
$array = splitNewLine($string);
function splitNewLine($text) {
$code = preg_replace('/\n$/', '', preg_replace('/^\n/', '', preg_replace('/[\r\n]+/', "\n", $text)));
return explode("\n", $code);
}
您可以一次抓取第 4 行,然后使用适当的正则表达式检查位置,然后相应地调整下一个块的位置:
function computeExperiences(array $lines): array
{
$experiences = [];
$position = 0;
while ($chunkLines = array_slice($lines, $position, 4)) {
$experience = array_slice($chunkLines, 0, 3);
$locationIsPresent = isset($chunkLines[3]) && preg_match('/\w+,\s\w+(?:,\s\w+)?/', $chunkLines[3]);
if ($locationIsPresent) {
$experience[] = $chunkLines[3];
$position += 4;
} else {
$position += 3;
}
$experiences[] = $experience;
}
return $experiences;
}
我正在编写一个脚本来解析 LinkedIn-CV。我被困在工作经验部分。目前我能够从 PDF 中提取工作经验文本。但我对位置键有疑问,因为它是可选的。
Array
(
[0] => Company 1
[1] => Software Engineer
[2] => July 2020 - Present (1 month)
[3] => Pretoria, Gauteng, South Africa //this key is optional
[4] => Company 2
[5] => CTO
[6] => September 2016 - Present (3 years 11 months)
[7] => Pretoria, South Africa //this key is optional
)
格式如下:
- 公司名称 - 必填项
- 职位名称 - 必填
- 工作时长 - 强制性
- 位置 - 可选
我试过使用 array_chunk($array, 4);
但这只有在该位置存在于数组中时才有效。
我的另一个尝试是在整个数组中搜索一个国家/地区的存在,但这很棘手,因为一些公司的标题包含国家/地区。像 MTN - 南非。
我最后一次尝试是尝试编写一个正则表达式来检查位置模式。 LinkedIn 将其解析为南非的 City, Province, Country
。但对于其他国家/地区,它解析为 City, Country
。但我没能正确地得到这个。我试过 preg_match('#\((,*?)\)#', $value, $match)
其中 $value
是当前迭代的字符串值
我想为每个工作经历创建一个数组,其中可以包含位置,也可以不包含位置。例如:
Array
(
[0] => Array
(
[0] => Company 1
[1] => Software Engineer
[2] => July 2020 - Present (1 month)
[3] => Pretoria, Gauteng, South Africa
)
[1] => Array
(
[0] => Company 2
[1] => CTO
[2] => September 2016 - Present (3 years 11 months)
[3] => Pretoria Area, South Africa
)
)
感谢您的帮助。
编辑:
主串(工作经验)
$string = 'Company 1 Software Engineer July 2020 - Present (1 month) Pretoria, Gauteng, South Africa Company 2 CTO September 2016 - Present (3 years 11 months) Pretoria Area, South Africa';
$array = splitNewLine($string);
function splitNewLine($text) {
$code = preg_replace('/\n$/', '', preg_replace('/^\n/', '', preg_replace('/[\r\n]+/', "\n", $text)));
return explode("\n", $code);
}
您可以一次抓取第 4 行,然后使用适当的正则表达式检查位置,然后相应地调整下一个块的位置:
function computeExperiences(array $lines): array
{
$experiences = [];
$position = 0;
while ($chunkLines = array_slice($lines, $position, 4)) {
$experience = array_slice($chunkLines, 0, 3);
$locationIsPresent = isset($chunkLines[3]) && preg_match('/\w+,\s\w+(?:,\s\w+)?/', $chunkLines[3]);
if ($locationIsPresent) {
$experience[] = $chunkLines[3];
$position += 4;
} else {
$position += 3;
}
$experiences[] = $experience;
}
return $experiences;
}