diff --git a/README.md b/README.md index 8410740..dfdf82d 100644 --- a/README.md +++ b/README.md @@ -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。 diff --git a/src/Enum.php b/src/Enum.php index e50c5fa..63953eb 100644 --- a/src/Enum.php +++ b/src/Enum.php @@ -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 */ @@ -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 等方法的公用方法。 * diff --git a/tests/EnumTest.php b/tests/EnumTest.php index 745e203..e0de425 100644 --- a/tests/EnumTest.php +++ b/tests/EnumTest.php @@ -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]); @@ -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);