phparraysmultidimensional-array

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?


I have an array in the following format:

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


           )
    )

What is the appropriate function to use to get a one dimensional associative array with the following structure?

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

I only want to keep the indicated values as key value pairs in the new array and ignore the rest - PREFIX_ is fixed length.

What I am doing right now:

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;
}

but I feel there ought to be a cleaner/more efficient way of accomplishing this


Solution

  • A way of simulating array_column() if you aren't running 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
        )
    );