检查数组中是否存在位置值

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

Demo