Obtener la clave de matriz actual dentro de foreach

Ok, estoy creando algo para mi empleador para que ingresen productos, tienen requisitos muy específicos. Tengo un formulario con campos generados dinámicamente como eso ... (obviamente no es el código exacto a seguir, pero los ejemplos son idénticos conceptualmente)

<input type="text" name="attribute[20]"> inputted value = height
<input type="text" name="attribute[27]"> inputted value = width

los números se generan según las cosas en la base de datos, por lo que 20 se correlacionaría con el "ancho" 27 se correlacionaría con la "altura", por ejemplo.

Entonces, una vez que el usuario ingresa los valores, necesito esos valores para ingresar a una base de datos ... o en la prueba, hacer eco.

foreach ($_POST['attribute'] as $attributes){
echo key($attributes).' '.$attributes.'<br>';
}

Así que eso debería salir ...

Valor de altura 20
Valor de ancho 27

pero en su lugar da salida

valor de altura
valor de ancho

Que esta pasando? Tengo algo similar ... pero ligeramente diferente, ya que los números definidos pueden tener más de una entrada ... que funciona perfectamente.

<input type="text" name="option[][20]"> inputted value = option 1
<input type="text" name="option[][20]"> inputted value = option 2
<input type="text" name="option[][27]"> inputted value = option 1

foreach ($_POST['option'] as $options){
echo key($options).' ';
foreach ($options as $option){
echo $option.'<br>';
}

que produce perfectamente ...

20 opción 1
20 opción 2
27 opción 1

No entiendo por qué el más complejo funciona y el más simple no, ¿me falta algo obvio? Soy consciente de que tengo un método poco ortodoxo de codificación en comparación con algunos, pero es lo que es lol. Cualquier ayuda sería muy apreciada.

EDITAR: Var volcado a lo solicitado

array (22) {["pID"] => string (12) "test product" ["pPrice"] => string (0) "" ["pName"] => string (0) "" ["pRRP" ] => cadena (0) "" ["pPostSize"] => cadena (0) "" ["pOurPrice"] => cadena (0) "" ["pEstDelivery"] => cadena (0) "" [" pWeight "] => string (0)" "[" pEAN "] => string (0)" "[" pOrder "] => string (0)" "[" pStock "] => string (0)" " ["pManufacturer"] => string (0) "" ["pType"] => string (13) "Shower Valves" ["pRange"] => string (0) "" ["cat"] => array ( 2) {[0] => cadena (2) "72" [1] => cadena (2) "23"} ["atributo"] => matriz (2) {[0] => cadena (5) "anchura"[1] => string (6)" height "} [" option "] => array (3) {[0] => array (1) {[11] => cadena (6) "obras1"} [1] => array (1) {[10] => cadena (6) "obras1"} [2] => array (1) {[10] => cadena (6) "trabaja2"}} [" pLongdescription "] => string (0)" "[" meta_description "] => string (0)" "[" meta_keyword "] => string (0)" "[" meta_title "] => string (0) "" ["action"] => string (6) "create"}

Las partes en negrita, son las partes que salen con éxito en mi segundo ejemplo. pero la cursiva en negrita, como puede ver, devuelve 0 en lugar del 20 que está realmente en el valor del nombre del formulario.

Respuestas a la pregunta(3)

Su respuesta a la pregunta