将多维数组的值转换为一维数组中的键值对,同时从其中一个值中取出前缀?

zor*_*anc 2 php arrays multidimensional-array

我有一个以下格式的数组:

Array (
    [0] => Array
        (
            [option_id] => 10820
            [option_name] => PREFIX_FIRST_OPT_KEY
            [option_value] => FIRST_OPT_VALUE
            [autoload] => yes
        )

    [1] => Array
        (
            [option_id] => 10821
            [option_name] => PREFIX_SECOND_OPT_KEY
            [option_value] => SECOND_OPT_VALUE
            [autoload] => yes
        )

    [2] => Array
        (
            [option_id] => 10824
            [option_name] => PREFIX_THIRD_OPT_KEY
            [option_value] => SECOND_OPT_VALUE
            [autoload] => yes


           )
    )
Run Code Online (Sandbox Code Playgroud)

用于获取具有以下结构的一维关联数组的适当函数是什么?

Array (
   [FIRST_OPT_KEY] => FIRST_OPT_VALUE
   [SECOND_OPT_KEY] => SECOND_OPT_VALUE
   [THIRD_OPT_KEY] => THIRD_OPT_VALUE
)
Run Code Online (Sandbox Code Playgroud)

我只想将指示的值保留为新数组中的键值对,并忽略其余的 -PREFIX_是固定长度的。

我现在正在做什么:

foreach ( $the_original_array as $key => $value ) {
        $new_key = substr($the_original_array[$key]['option_name'], 7);
        $option_value = $the_original_array[$key]['option_value'];
            $new_array[$new_key] = $option_value;
}
Run Code Online (Sandbox Code Playgroud)

但我觉得应该有一种更清洁/更有效的方法来实现这一点

Azi*_*leh 6

如果您的 PHP >= 5.5:

要提取值:

$result = array_column($array, 'option_value', 'option_name');
Run Code Online (Sandbox Code Playgroud)

然后删除前缀:

$result = array_combine(
  array_map(
      function($k){
          return str_replace('PREFIX_', '', $k); 
      },
      array_keys($result)
  ), $result 
);
Run Code Online (Sandbox Code Playgroud)