问题描述
我上课
class Data {
static $array = [
'k1' => [
'k2' => 'val1',],'a1' => [
'a2' => [
'a3' => 'val2',]
],];
public static function getValue(string $key) {
$keys = explode('|',$key);
$array = self::$array;
$lastKey = end($keys);
foreach($keys as $key) {
if (!isset($array[$key])) {
return '';
}
if (is_array($array[$key])) {
$array = $array[$key];
} elseif($key == $lastKey) {
return $array[$key];
}
}
}
}
现在我想要那个
Data::getValue('k1|k2')
将返回 val1
Data::getValue('a1|a2|a3')
将返回 val2
以此类推
如果没有键,它将返回空字符串
有更好的方法吗?
解决方法
<?php
class Data
{
public static $array =
[
'k1' => [
'k2' => 'val1',],'a1' => [
'a2' => [
'a3' => 'val2',]
],];
public static function getValue(string $pipe_path) {
$array = self::$array;
foreach(explode('|',$pipe_path) as $idx) {
if(!isset($array[$idx])) {
return '';
}
$array = $array[$idx];
}
return $array;
}
}
var_dump(Data::getValue('k1|k2'));
var_dump(Data::getValue('a1|a2|a3'));
var_dump(Data::getValue('foo1|bar2'));
输出:
string(4) "val1"
string(4) "val2"
string(0) ""