数组上的映射字符串

问题描述

我上课

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) ""