数据由一系列测量值组成,由数字分隔符分隔。每个测量值都有一个法语名称和一个公制值,后跟一个带有英制值的英文版本。
因此,我们需要从每个块中提取四个值,并将这四个值组合成一个数组的两行。
explode() 有点简单,因为字段之间存在数字分隔符。正则表达式可以一次提取相关数据,然后我们只需将其组装成最终结果。
这里的正则表达式包含四个捕获组来收集所需的数据,以及一个非捕获组作为分隔符。
<?php
$measurements = "Hauteur/-/175 cm/-/Height/-/5'9''/-/00010/--/Buste (Femme)/-/92 cm/-/Bust (Women)/-/36''/-/00020/--/Taille/-/74 cm/-/Waist/-/29''/-/00022/--/Hanches/-/99 cm/-/Hips/-/39''/-/00023";
$regex = "%(.*?)/-/(.*?)/-/(.*?)/-/(.*?)/-/\d{5}(?:/--/){0,1}%";
preg_match_all($regex, $measurements, $matches);
preg_match_all() 将数据提取到$matches 数组中。我们得到一个这样的数组:
array(5) {
[0]=>
array(4) {
[0]=> string(45) "Hauteur/-/175 cm/-/Height/-/5'9''/-/00010/--/"
[1]=> string(55) "Buste (Femme)/-/92 cm/-/Bust (Women)/-/36''/-/00020/--/"
[2]=> string(41) "Taille/-/74 cm/-/Waist/-/29''/-/00022/--/"
[3]=> string(37) "Hanches/-/99 cm/-/Hips/-/39''/-/00023"
}
[1]=>
array(4) {
[0]=> string(7) "Hauteur"
[1]=> string(13) "Buste (Femme)"
[2]=> string(6) "Taille"
[3]=> string(7) "Hanches"
}
[2]=>
array(4) {
[0]=> string(6) "175 cm"
[1]=> string(5) "92 cm"
[2]=> string(5) "74 cm"
[3]=> string(5) "99 cm"
}
[3]=>
array(4) {
[0]=> string(6) "Height"
[1]=> string(12) "Bust (Women)"
[2]=> string(5) "Waist"
[3]=> string(4) "Hips"
}
[4]=>
array(4) {
[0]=> string(5) "5'9''"
[1]=> string(4) "36''"
[2]=> string(4) "29''"
[3]=> string(4) "39''"
}
}
我们可以忽略$matches 的第一个元素,因为它包含每个完整的匹配项。我们对包含每个匹配组结果的其他四个元素感兴趣。
这些匹配组中的第一个包含法语名称,第二个包含度量值。第三和第四分别包含英制和英制。
我们现在需要做的就是逐步遍历数组,在新数组中创建正确的键和值:
$output = [];
for ($i = 0; $i<count($matches[0]);$i++) {
$output[$matches[1][$i]]=$matches[2][$i];
$output[$matches[3][$i]]=$matches[4][$i];
}
var_dump($output);
输出:
array(8) {
["Hauteur"]=>
string(6) "175 cm"
["Height"]=>
string(5) "5'9''"
["Buste (Femme)"]=>
string(5) "92 cm"
["Bust (Women)"]=>
string(4) "36''"
["Taille"]=>
string(5) "74 cm"
["Waist"]=>
string(4) "29''"
["Hanches"]=>
string(5) "99 cm"
["Hips"]=>
string(4) "39''"
}
演示:https://3v4l.org/i4mQM