从字符串中提取数据的最佳方法

Best way to extract data from a string

我正在寻找从字符串中提取数据并将其组织成信息数组的最有效、最简洁的方法。我正在构建一个工具,将粘贴的备忘录信息转换为更易读的格式。

目前我们收到这样的新员工备忘录:

NAME: JOHN SMITH

SERVICE: ICT

MANAGER: JOHN TURNER

POST TITLE: IT Support Officer

我希望能够将所有这些信息放入从文本区域 POST 获取的数组中,然后以如下更好的格式将其显示在页面上:

Full Name: John Smith

Service Area: ICT

Line Manager: John Turner

Job Title: IT Support Officer

我知道我可以使用像 explode() 这样的函数,但我只是想看看是否有更好的方法来做到这一点?

我想将所有信息存储在一个数组中,以便在我的网页发布到服务器后很容易将其 ECHO 到我的网页上。

$Newemployee['Name'] = "John Smith";
$Newemployee['Service'] = "ICT";
$Newemployee['Manager'] = "John Turner";
$Newemployee['Post_title'] = "IT Support Officer";

如果有人有任何建议,那就太好了。

假设您无法控制输入的格式,并且没有以任何方式清理输入,我相信实现此目的最合适的方法是使用 explode() 如您所述:

$newuser = [];

$input = "NAME: JOHN SMITH

SERVICE: ICT

MANAGER: JOHN TURNER

POST TITLE: IT Support Officer";

$lines = array_filter(explode("\n", $input));

foreach ($lines as $line) {

    $parts = explode(": ", $line);
    $newuser[ucfirst(strtolower(str_replace(" ", "_", $parts[0])))] = $parts[1];

}

编辑

已更改数组索引以反映您所描述的格式。

至于实际值,通常最好以相同的形式(即小写)存储所有值,并在屏幕上打印时相应地设置它们的格式。这使您可以轻松比较值,而无需知道每个字符串的格式 - 这意味着您可以检测到 'ICT' 之类的首字母缩写词并将其全部大写,而另一个 'Service' 可能不是首字母缩写词所以你希望它只是被大写。