解析 JSON 文件并比较 semvers
Parsing a JSON file and comparing semvers
我有一个 json 文件,大致如下所示。
{
"foo" : {
"name" : "bar",
"dev-master" : {},
"3.0-dev" : {},
"2.4" : {},
"master" : {},
}
}
我想知道是否有解决方案来解析并获取最反感的semver标签。我试过:
<?php
$file = 'data.json';
$content = file_get_contents($file);
$content = json_decode($content);
$container = [];
foreach($content as $version){
$container[$version] = $version;
}
..
现在,假设 $container
包含所有标签,我如何获得最新版本将是 2.4。
获取 2.4
不是问题,而是制定一个面向未来的可靠方法来找出哪个是最近的。
这是一种方法。它假设最新版本号仅由数字和小数点组成。您可以更新正则表达式以允许破折号等。
#!/usr/bin/php
<?php
$content = json_decode(file_get_contents('data.json'));
$container = [];
foreach($content as $name => $versions){
$props = get_object_vars($versions);
$container[$name] = null;
foreach (array_keys($props) as $versionName) {
if (preg_match('/^[0-9\.]+$/',$versionName)) {
// Ensure if multiple versions are present the greatest
value will be used
if (isset($container[$name])) {
$container[$name] = max($versionName,$container[$nam
e]);
} else {
$container[$name] = $versionName;
}
}
}
}
var_dump($container);
如果没有找到最终版本,版本名称将为空。
我有一个 json 文件,大致如下所示。
{
"foo" : {
"name" : "bar",
"dev-master" : {},
"3.0-dev" : {},
"2.4" : {},
"master" : {},
}
}
我想知道是否有解决方案来解析并获取最反感的semver标签。我试过:
<?php
$file = 'data.json';
$content = file_get_contents($file);
$content = json_decode($content);
$container = [];
foreach($content as $version){
$container[$version] = $version;
}
..
现在,假设 $container
包含所有标签,我如何获得最新版本将是 2.4。
获取 2.4
不是问题,而是制定一个面向未来的可靠方法来找出哪个是最近的。
这是一种方法。它假设最新版本号仅由数字和小数点组成。您可以更新正则表达式以允许破折号等。
#!/usr/bin/php
<?php
$content = json_decode(file_get_contents('data.json'));
$container = [];
foreach($content as $name => $versions){
$props = get_object_vars($versions);
$container[$name] = null;
foreach (array_keys($props) as $versionName) {
if (preg_match('/^[0-9\.]+$/',$versionName)) {
// Ensure if multiple versions are present the greatest
value will be used
if (isset($container[$name])) {
$container[$name] = max($versionName,$container[$nam
e]);
} else {
$container[$name] = $versionName;
}
}
}
}
var_dump($container);
如果没有找到最终版本,版本名称将为空。