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


Converting multidimensional array's values into a key value pair in a one-dimensional array while taking out a prefix out of one of the values?

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

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

           )
    )

使用什么函数来获得具有以下结构的一维关联数组?

Array (
   [FIRST_OPT_KEY] => FIRST_OPT_VALUE
   [SECOND_OPT_KEY] => SECOND_OPT_VALUE
   [THIRD_OPT_KEY] => THIRD_OPT_VALUE
)

我只想保留指定的值作为新数组中的键值对,而忽略其余的- 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;
}

但我觉得应该有一个更干净/更有效的方法来完成这个

如果你有PHP>= 5.5:

提取值:

$result = array_column($array, 'option_value', 'option_name');

然后删除前缀:

$result = array_combine(
  array_map(
      function($k){
          return str_replace('PREFIX_', '', $k); 
      },
      array_keys($result)
  ), $result 
);

模拟array_column()的方法,如果您没有运行PHP 5.5+

$newArray = array_combine(
    array_map(
        function($value)  {
            return substr($value['option_name'], 7);
        },
        $the_original_array
    ),
    array_map(
        function($value)  {
            return $value['option_value'];
        },
        $the_original_array
    )
);

接受的答案是有效的,但它会导致多次迭代数据。假设PHP <在5.5.0中,使用array_reduce将只对数据循环一次,并返回相同的结果:>

$iterator = function($result, $record) {
    $key = substr($record['option_name'], 7);
    $result[$key] = $record['option_value'];
    return $result;
};
$newArray = array_reduce($original, $iterator, array());

我将使用array_column,但PHP <5.5.0您所拥有的是您所能做的最好的,但是您可以使用foreach生成的$value:

foreach ( $the_original_array as $value ) {
    $new_key = substr($value['option_name'], 7);
    $option_value = $value['option_value'];
    $new_array[$new_key] = $option_value;
}

我认为每个人都很好,就像:

$new = array();
foreach ($original_array as $item) {
    $index = str_replace('PREFIX_', '', $item['option_name']);
    $new[$index] = $item['option_value'];
}