# Cálculos en matriz multidimensional

Estoy trabajando en un proyecto y no puedo entender un cálculo que debe realizarse en una matriz multidimensional. Introducción rápida, es una herramienta de evaluación comparativa de hoteles y necesito calcular el índice de penetración de mercado (MPI). Tengo una matriz con 3 matrices principales. Los primeros 2 son los hoteles que se comparan y el último es la matriz MPI.

Cada matriz contiene una matriz para cada mes que selecciona el usuario. Dentro de ESA matriz hay datos que deben usarse para los cálculos. Aquí hay un ejemplo:

``````Array
(
[Competitive set] => Array
(
[Sep 11] => Array
(
[0] => Array
(
[minmonth] => 2011-09-01
[maxmonth] => 2011-09-01
[nrcheck] => 13
[data] => 67.6
)

)

[Oct 11] => Array
(
[0] => Array
(
[minmonth] => 2011-10-01
[maxmonth] => 2011-10-01
[nrcheck] => 13
[data] => 63.6
)

)

[Nov 11] => Array
(
[0] => Array
(
[minmonth] => 2011-11-01
[maxmonth] => 2011-11-01
[nrcheck] => 13
[data] => 59.2
)

)

[Dec 11] => Array
(
[0] => Array
(
[minmonth] => 2011-12-01
[maxmonth] => 2011-12-01
[nrcheck] => 13
[data] => 54.6
)

)

)

[Test] => Array
(
[Sep 11] => Array
(
[0] => Array
(
[minmonth] => 2011-09-01
[maxmonth] => 2011-09-01
[nrcheck] => 89
[data] => 71.5
)

)

[Oct 11] => Array
(
[0] => Array
(
[minmonth] => 2011-10-01
[maxmonth] => 2011-10-01
[nrcheck] => 89
[data] => 67.0
)

)

[Nov 11] => Array
(
[0] => Array
(
[minmonth] => 2011-11-01
[maxmonth] => 2011-11-01
[nrcheck] => 91
[data] => 63.1
)

)

[Dec 11] => Array
(
[0] => Array
(
[minmonth] => 2011-12-01
[maxmonth] => 2011-12-01
[nrcheck] => 89
[data] => 57.5
)

)

)

[MPI] => Array
(
[Sep 11] => Array
(
[0] => Array
(
[minmonth] => 2011-09-01
[maxmonth] => 2011-09-01
[nrcheck] => 89
[data] => 71.5
)

)

[Oct 11] => Array
(
[0] => Array
(
[minmonth] => 2011-10-01
[maxmonth] => 2011-10-01
[nrcheck] => 89
[data] => 67.0
)

)

[Nov 11] => Array
(
[0] => Array
(
[minmonth] => 2011-11-01
[maxmonth] => 2011-11-01
[nrcheck] => 91
[data] => 63.1
)

)

[Dec 11] => Array
(
[0] => Array
(
[minmonth] => 2011-12-01
[maxmonth] => 2011-12-01
[nrcheck] => 89
[data] => 57.5
)

)

)
``````

)

aquí hay un pastebin con var_export como se sugiere (parece que no se puede formatear correctamente aquí) http://pastebin.com/b8hYM7TW Perdón por el enorme bloque de código, pero tenía que ser así de grande =( De cualquier manera, actualmente los 'datos' para MPI son incorrectos. Eso debe convertirse en los datos de la primera matriz divididos por los datos de la segunda matriz y multiplicados por 100 ( porcentaje).

Las claves "Conjunto competitivo" y "Prueba" son variables y no están disponibles en el ámbito en el que estoy trabajando, por lo que no se pueden usar esos nombres estáticos.

Leí sobre funciones recursivas pero todavía no lo entiendo ...

preguntado el 21 de mayo de 12 a las 18:05

si quiere folletos de código, al menos que sea fácil para que alguien pueda ayudar. usar var_export() -

Agregado como pastebin hasta que pueda obtener el formato correcto. ¿Cuál es la diferencia entre var_export y print_r en términos de facilitar la ayuda? -

Del PHP.Manual: 'var_export() obtiene información estructurada sobre la variable dada. Es similar a var_dump() con una excepción: la representación devuelta es un código PHP válido.' -

¡Sí, me di cuenta de eso hace un par de minutos! No sabía que eso era posible. ¡Muy agradable! -

Por lo que veo en los datos que pegó, Dit Hotel tiene '-' como elemento de datos, por lo que realmente no puede hacer ningún cálculo con eso. ¿Estás haciendo MPI = (Dit Hotel['month']/Test['month'])*100 ? Además, ¿podría cada mes tener más de un valor de datos? Si no, hay un montón de suposiciones que podría hacer para que realmente no necesite una implementación recursiva. -

## 1 Respuestas

Bueno, la matriz pastebin que proporcionó no tiene ningún dato en la matriz "Dit hotel", por lo que realmente no puedo confirmar que esto funcione, pero aquí tiene

``````foreach (\$array['Dit hotel'] as \$key => \$value) {

\$array['MPI'][\$key][0]['data'] = \$value[0]['data'] / \$array['Test'][\$key][0]['data'] * 100;
}
``````