Skip to content

Commit

Permalink
添加 valuesToLabels、labelsToValues 方法
Browse files Browse the repository at this point in the history
  • Loading branch information
lip8up committed Mar 28, 2022
1 parent 119e1b2 commit 5760374
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 1 deletion.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,9 @@ allKeys() | 获取全部 key 列表。
allValues() | 获取全部 value 列表。
allLabels() | 获取全部 label 列表。
valueToLabel(mixed $value = null, $default = null) | 获取 $value 对应的 label,如不存在,返回 $default,若不传参数,返回整个 `map`,例如:`[1 => '一', 2 => '二', 3 => '三']`
valuesToLabels(array $values, $default = null) | 将一批 value 转换成对应的 label,若不存在,使用 $default 取代。
labelToValue(string $label = null, $default = null) | 获取 $label 对应的 value,如不存在,返回 $default,若不传参数,返回整个 `map`。例如:`['一' => 1, '二' => 2, '三' => 3]`
labelsToValues(array $labels, $default = null) | 将一批 label 转换成对应的 value,若不存在,使用 $default 取代。
isValidKey(string $key) | 判断是否为合法的 key。
isValidValue(mixed $value) | 判断是否为合法的 value。
isValidLabel(string $label) | 判断是否为合法的 label。
Expand Down
34 changes: 33 additions & 1 deletion src/Enum.php
Original file line number Diff line number Diff line change
Expand Up @@ -269,11 +269,27 @@ public static function valueToLabel($value = null, $default = null)
return func_num_args() == 0 ? $map : ($value !== null ? ($map[$value] ?? $default) : $default);
}

/**
* 将一批 value 转换成对应的 label,若不存在,使用 $default 取代。
*
* @param array $values 一批值
* @param mixed $default 默认的 value
* @return array
*/
public static function valuesToLabels(array $values, $default = null): array
{
$labels = [];
foreach ($values as $value) {
$labels[] = static::valueToLabel($value, $default);
}
return $labels;
}

/**
* 获取 $label 对应的 value,如不存在,返回 $default,若不传参数,返回整个 map,例如:['一' => 1, '二' => 2, '三' => 3]
*
* @param string $label 要转换的 label
* @param mixed $default 默认的 value
* @param mixed $default 默认的 label
*
* @return mixed|null|array
*/
Expand All @@ -283,6 +299,22 @@ public static function labelToValue(string $label = null, $default = null)
return func_num_args() == 0 ? $map : ($label !== null ? ($map[$label] ?? $default) : $default);
}

/**
* 将一批 label 转换成对应的 value,若不存在,使用 $default 取代。
*
* @param array $labels
* @param mixed $default 默认的 label
* @return array
*/
public static function labelsToValues(array $labels, $default = null): array
{
$values = [];
foreach ($labels as $label) {
$values[] = static::labelToValue($label, $default);
}
return $values;
}

/**
* allValues、allLabels、valueToLabel、labelToValue 等方法的公用方法。
*
Expand Down
14 changes: 14 additions & 0 deletions tests/EnumTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,13 @@ public function testValueToLabel()
$this->assertEquals(Other::valueToLabel('bb'), 'bb');
}

public function testValuesToLabels()
{
$this->assertEquals(Some::valuesToLabels([1, 2]), ['', '']);
$this->assertEquals(Some::valuesToLabels([1, 4, 3]), ['', null, '']);
$this->assertEquals(Some::valuesToLabels([1, 4, 3], '-'), ['', '-', '']);
}

public function testLabelToValue()
{
$this->assertEquals(Some::labelToValue(), ['' => 1, '' => 2, '' => 3]);
Expand All @@ -257,6 +264,13 @@ public function testLabelToValue()
$this->assertEquals(Other::labelToValue('xxx'), null);
}

public function testLabelsToValues()
{
$this->assertEquals(Some::labelsToValues(['', '']), [1, 2]);
$this->assertEquals(Some::labelsToValues(['', '', '']), [1, 2, null]);
$this->assertEquals(Some::labelsToValues(['', '', ''], '*'), [1, 2, '*']);
}

public function testIsValidKey()
{
$this->assertSame(Some::isValidKey('One'), true);
Expand Down

0 comments on commit 5760374

Please sign in to comment.