【问题标题】:Map string on array在数组上映射字符串
【发布时间】:2020-12-12 22:20:05
【问题描述】:

我有课

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 arrays multidimensional-array associative-array


    【解决方案1】:
    <?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) ""
    

    【讨论】:

    • @Progrock 更新了答案,感谢您指出我在纯文件中测试它的范围
    猜你喜欢
    • 2021-11-15
    • 2012-01-23
    • 2013-06-15
    • 2014-10-31
    • 2017-07-28
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多