¿Cómo creo una matriz asociativa multidimensional dentro de un bucle foreach?

Quiero crear una matriz que se vea así

 $appsByOs = Array(
                  osName1 =>Array(0=>app1,1=>app2)
                  osName2 =>Array(0=>app1,1=>app2)
                  etc.....
  )

¿Cómo podría hacer esto dentro de un bucle foreach?

  foreach($osInstanceNames as $osInstanceName){
                    $appNames(array of app names for current os)

            }

gracias

preguntado el 03 de mayo de 12 a las 15:05

¿Podría aclarar lo que quería creado dinámicamente? ¿Fue creando $appsByOs dinámicamente cuando ya tiene un método para completar $appNames? Si fue $appNames, ¿puede darnos alguna pista de la fuente de datos para $appNames?

estaba creando $appsByOs dinámicamente. $appNames ya está poblado por una consulta que se ejecuta de acuerdo con cada osInstanceName. -

Mi respuesta a continuación crea $appsByOs llenando dinámicamente una clave osName con el osName actual y asignando cualquier valor que tenga en $appNames. lo que no hace es llenar $appNames con datos diferentes para cada sistema operativo. Debería llamar a una función para obtener diferentes datos en $ appNames para cada sistema operativo, ya que de lo contrario cada sistema operativo tendrá las mismas aplicaciones en la lista:

2 Respuestas

Todo lo que debe hacer es esto.

 $appsByOs = Array();
 foreach($osInstanceNames as $osInstanceName){
                     $appsByOs[$osInstanceName] = $appNames;

 }

contestado el 03 de mayo de 12 a las 15:05

Fue un error tipográfico que se eliminó: Ángel

Casi, pero no del todo Anigel, ¿qué sucede cuando se agrega una segunda aplicación a la matriz? Por el momento, sobrescribirá la aplicación anterior con este código. - David Barker

Si por aplicación te refieres a nombres de aplicaciones, entonces esto se especificó como una matriz en la pregunta en lugar de ser necesario para repetirlo: Ángel

Efectivamente, pero no has entendido lo que te decía. $appNames en su código sobrescribirá cualquier asignación anterior a $appsByOs[$osInstanceName]. La salida solo tendrá el último AppName asignado por el bucle, no una matriz de AppNames. - David Barker

Lo siento Anigel, ¡debí haber aprendido a leer la pregunta! Estás en lo correcto. Aunque creo que en realidad quiere que la matriz se cree dinámicamente... - David Barker

Recuperando la última publicación y agregando la posibilidad de tener más de una aplicación para una instancia de sistema operativo

 $appsByOs = Array(); 
 foreach($osInstanceNames as $osInstanceName){ 
                     $appsByOs[$osInstanceName][] = $appNames; 

 } 

contestado el 03 de mayo de 12 a las 15:05

Esto no respondería a la pregunta. esto conduciría a la salida de osName1 =>Array(0=>array(app1),1=>array(app2)) La pregunta muestra que $appNames ya es una matriz y también se basa en que cada sistema operativo se enumera varias veces en $osInstanceNames - Ángel

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.