New question

Question:

Date: 12-07-2019 16:23:25 (In Spanish)

Manejo de Array Multidimencional[Resolved]

Detectado que es un error en el manejo de los Arrays a partir de la versión 7.1, tengo la siguiente pregunta: ¿Qué cambio se debe realizar para que el siguiente código funcione?

La estructura de datos es la siguiente:

$TEMAS=Array(
 [TEM1]=>Array(
  [NOM]=>"1000"
  [SEC]=>Array(
   [0]=>Array(
    [NOM]=>"1100"
    [EVA]=>Array(
     [0]=>Array(
      [NOM]=>"1110"
      [SES]=>Array(
       [0]=>Array(
        [NOM]=>"1111"
        [DAT]=>"DATO 1111"
       )
       [1]=>Array(
        [NOM]=>"1112"
        [DAT]=>"DATO 1112"
     )))
     [1]=>Array(
      [NOM]=>"1120"
      [SES]=>Array(
       [0]=>Array(
        [NOM]=>"1121"
        [DAT]=>"DATO 1121"
       )
       [1]=>Array(
        [NOM]=>"1122"
        [DAT]=>"DAT 1122"
   )))))
   [1]=>Array(
    [NOM]=>"1200"
    [EVA]=>Array(
     [0]=>Array(
      [NOM]=>"1210"
      [SES]=>Array(
       [0]=>Array(
        [NOM]=>"1211"
        [DAT]=>"DATO 1211"
       )
       [1]=>Array(
        [NOM]=>"1212"
        [DAT]=>"DATO 1212"
     )))
     [1]=>Array(
      [NOM]=>"1220"
      [SES]=>Array(
       [0]=>Array(
        [NOM]=>"1221"
        [DAT]=>"DATO 1221"
       )
       [1]=>Array(
        [NOM]=>"1222"
        [DAT]=>"DATO 1222"
  ))))))
 [TEM2]=>Array(
  [NOM]=>"2000"
  [SEC]=>Array(
   [0]=>Array(
    [NOM]=>"2100"
    [EVA]=>Array(
     [0]=>Array(
      [NOM]=>"2110"
      [SES]=>Array(
       [0]=>Array(
        [NOM]=>"2111"
        [DAT]=>"DATO 2111"
       )
       [1]=>Array(
        [NOM]=>"2112"
        [DAT]=>"DATO 2112"
     )))
     [1]=>Array(
      [NOM]=>"2120"
      [SES]=>Array(
       [0]=>Array(
        [NOM]=>"2121"
        [DAT]=>"DATO 2121"
       )
       [1]=>Array(
        [NOM]=>"2122"
        [DAT]=>"DATO 2122"
   )))))
   [1]=>Array(
    [NOM]=>"2200"
    [EVA]=>Array(
     [0]=>Array(
      [NOM]=>"2210"
      [SES]=>Array(
       [0]=>Array(
        [NOM]=>"2211"
        [DAT]=>"DATO 2211"
       )
       [1]=>Array(
        [NOM]=>"2212"
        [DAT]=>"DATO 2212"
     )))
     [1]=>Array(
      [NOM]=>"2220"
      [SES]=>Array(
       [0]=>Array(
        [NOM]=>"2221"
        [DAT]=>"DATO 2221"
       )
       [1]=>Array(
        [NOM]=>"2222"
        [DAT]=>"DATO 2222"
 )))))))


Y el código que la recorre es el siguiente:

foreach($TEMAS AS $LosTemas){
 foreach($LosTemas['SEC'] AS $LasSecuencias){++$secNUM;
  foreach($LasSecuencias['EVA'] AS $LasEvaluaciones){

...
?>


El resultado en las versiones anteriores a la 7.1 es que el array contenido en cada item es procesado correctamente. El error, de hecho, lo presenta a partir del segundo foreach.

Tags: PHP MySQLi Votes: 0 - Answers: 19 - Views: 12 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 15-07-2019 04:54:17 ¿Cuál es el error que ves?   Votes: 1 - Link answer
     
  • Date: 15-07-2019 07:19:36 Desafortunadamente el ejemplo que pones no es código válido. Parece que tomaste la salida de un var_dump y la pegaste.

    Podrías compartir un ejemplo más completo? De esa manera te podremos ayudar mejor.

    Saludos
      Votes: 1 - Link answer
     
  • Date: 15-07-2019 10:18:44 Ciertamente, es un vaciado de la variable.
    El error que marca es:

    Warning: Illegal string offset 'EVALUACIONES' in C:\wamp64\VIRTUAL\cecati86.edu.mx\pac\pds_sesiones_formato4.php on line 8

    La linea 8 es la marcada en negritas en el código más abajo.

    Revisé la estructura de la variable, y sí existe el índice como tal con sus comillas y en mayúsculas. El detalle es que el error resulta al utilizar versiones 7.1 y superiores.

    Se trata de una estructura multidimensional de 4 niveles, con la siguiente plantilla:

    SESIONES=array(id,nombre)
    EVALUACIONES=array(id,nombre,SESIONES)
    SECUENCIAS=array(id,nombre,EVALUACIONES)
    TEMAS=array(id,nombre,SECUENCIAS)

    De ahí que el encabezado del código de recorrido sea:
    foreach($TEMAS AS $LosTemas){
    foreach($LosTemas['SECUENCIAS'] AS $LasSecuencias){
    foreach($LasSecuencias['EVALUACIONES'] AS $LasEvaluaciones){
    foreach($LasEvaluaciones['SESIONES'] AS $LasSesiones){
    /*
    [ Código ]
    */

    }
    }
    }
    }
    ?>

    Si es necesario, adjunto el código que integra el arreglo TEMAS, que contiene a los demás arreglos.

    Gracias por contestar.

    <?php
    $SQL="SELECT ".
                 "2temario.id AS temID, 2temario.nombre as temNOMBRE, ".
    
                 "3secuencia.id AS secID, 3secuencia.nombre as secNOMBRE, ".
                 "3secuencia.problema AS secPROBLEMA, 3secuencia.incentivo as secINCENTIVO, ".
    
                 "4evaluacionruta.id AS evaID, 4evaluacionruta.nombre as evaNOMBRE, ".
                 "4evaluacionruta.criterios AS evaCRITERIOS, ".
                 "4evaluacionruta.conocimientos AS evaCONOCIMIENTOS, ".
                 "4evaluacionruta.evidencias as evaEVIDENCIAS, ".
                 "4evaluacionruta.instrumento AS evaINSTRUMENTO, ".
    
                 "4evaluacionruta.material      AS evaMATERIAL, ".
                 "4evaluacionruta.metacognicion AS evaMETACOGNICION, ".
                 "4evaluacionruta.ponderacion   AS evaPONDERACION, ".
                 "4evaluacionruta.d_preformal   AS evaDPREFORMAL, ".
                 "4evaluacionruta.d_receptivo   AS evaDRECEPTIVO, ".
                 "4evaluacionruta.d_resolutivo  AS evaDRESOLUTIVO, ".
                 "4evaluacionruta.d_autonomo    AS evaDAUTONOMO, ".
                 "4evaluacionruta.d_estrategico AS evaDESTRATEGICO, ".
                 "4evaluacionruta.p_preformal   AS evaPPREFORMAL, ".
                 "4evaluacionruta.p_receptivo   AS evaPRECEPTIVO, ".
                 "4evaluacionruta.p_resolutivo  AS evaPRESOLUTIVO, ".
                 "4evaluacionruta.p_autonomo    AS evaPAUTONOMO, ".
                 "4evaluacionruta.p_estrategico AS evaPESTRATEGICO, ".
    
                 "5sesion.id AS sesID, 5sesion.personaje AS sesPERSONAJE, ".
                 "5sesion.nombre AS sesNOMBRE, 5sesion.accion AS sesACCION, ".
                 "5sesion.tiempo AS sesTIEMPO, 5sesion.actividad AS sesACTIVIDAD ".
         "FROM ((2temario ".
                     "RIGHT JOIN 3secuencia      ON 2temario.id        = 3secuencia.tema) ".
                     "RIGHT JOIN 4evaluacionruta ON 3secuencia.id      = 4evaluacionruta.secuencia) ".
                     "RIGHT JOIN 5sesion         ON 4evaluacionruta.id = 5sesion.evaluacionruta ".
         "WHERE (((2temario.curso)=".$_SESSION['i_curso']."));";
    
    $RES = $conn->query($SQL);
    
    $temNUM=0;
    $secNUM=0;
    $evaNUM=0;
    $sesNUM=0;
    $contador=0;
    
    // Inicia el esquema
    //$SESIONES=array();
    
    while($ROW=$RES->fetch_assoc()){
     if(!$contador++){
    
      $temID =$ROW['temID'    ];
      $temNOM=$ROW['temNOMBRE'];
    
      $secID =$ROW['secID'       ];
      $secNOM=$ROW['secNOMBRE'   ];
      $secPRO=$ROW['secPROBLEMA' ];
      $secINC=$ROW['secINCENTIVO'];
    
      $evaID =$ROW['evaID'            ];
      $evaNOM=$ROW['evaNOMBRE'        ];
      $evaCRI=$ROW['evaCRITERIOS'     ];
      $evaCON=$ROW['evaCONOCIMIENTOS' ];
      $evaEVI=$ROW['evaEVIDENCIAS'    ];
      $evaINS=$ROW['evaINSTRUMENTO'   ];
    
      $evaMAT =$ROW['evaMATERIAL'     ];
      $evaMET =$ROW['evaMETACOGNICION'];
      $evaPON =$ROW['evaPONDERACION'  ];
      $evaDPRE=$ROW['evaDPREFORMAL'   ];
      $evaDREC=$ROW['evaDRECEPTIVO'   ];
      $evaDRES=$ROW['evaDRESOLUTIVO'  ];
      $evaDAUT=$ROW['evaDAUTONOMO'    ];
      $evaDEST=$ROW['evaDESTRATEGICO' ];
      $evaPPRE=$ROW['evaPPREFORMAL'   ];
      $evaPREC=$ROW['evaPRECEPTIVO'   ];
      $evaPRES=$ROW['evaPRESOLUTIVO'  ];
      $evaPAUT=$ROW['evaPAUTONOMO'    ];
      $evaPEST=$ROW['evaPESTRATEGICO' ];
    
      $sesID       =$ROW['sesID'       ];
      $sesNOM      =$ROW['sesNOMBRE'   ];
      $sesACTIVIDAD=$ROW['sesACTIVIDAD'];
      $sesPERSONAJE=$ROW['sesPERSONAJE'];
      $sesACCION   =$ROW['sesACCION'   ];
      $sesTIEMPO   =$ROW['sesTIEMPO'   ];
     }
     if($temID==$ROW['temID'] and $secID==$ROW['secID'] and $evaID==$ROW['evaID']){
      $SESION =array('ID'       =>$ROW['sesID'],
                     'ACTIVIDAD'=>$ROW['sesACTIVIDAD'],
                     'NOMBRE'   =>$ROW['sesNOMBRE'],
                     'PERSONAJE'=>$ROW['sesPERSONAJE'],
                     'ACCION'   =>$ROW['sesACCION'],
                     'TIEMPO'   =>$ROW['sesTIEMPO']);
      $SESIONES[]=$SESION;
     }
     if($evaID<>$ROW['evaID']){
    //  $EVALUACIONES[]=array('ID'           =>$evaID,
      $EVALUACIONES=array('ID'           =>$evaID,
                            'NOMBRE'       =>$evaNOM,
                            'CRITERIOS'    =>$evaCRI,
                            'CONOCIMIENTOS'=>$evaCON,
                            'EVIDENCIAS'   =>$evaEVI,
                            'INSTRUMENTO'  =>$evaINS,
    
                            'MATERIAL'     =>$evaMAT,
                            'METACOGNICION'=>$evaMET,
                            'PONDERACION'  =>$evaPON,
                            'DPREFORMAL'   =>$evaDPRE,
                            'DRECEPTIVO'   =>$evaDREC,
                            'DRESOLUTIVO'  =>$evaDRES,
                            'DAUTONOMO'    =>$evaDAUT,
                            'DESTRATEGICO' =>$evaDEST,
                            'PPREFORMAL'   =>$evaPPRE,
                            'PRECEPTIVO'   =>$evaPREC,
                            'PRESOLUTIVO'  =>$evaPRES,
                            'PAUTONOMO'    =>$evaPAUT,
                            'PESTRATEGICO' =>$evaPEST,
    
                            'SESIONES'=>$SESIONES);
      $evaID =$ROW['evaID' ];
      $evaNOM=$ROW['evaNOMBRE'];
      $evaEVI=$ROW['evaEVIDENCIAS' ];
      $evaCRI=$ROW['evaCRITERIOS'];
      $evaCON=$ROW['evaCONOCIMIENTOS'];
      $evaINS=$ROW['evaINSTRUMENTO'];
    
      $evaMAT =$ROW['evaMATERIAL'     ];
      $evaMET =$ROW['evaMETACOGNICION'];
      $evaPON =$ROW['evaPONDERACION'  ];
      $evaDPRE=$ROW['evaDPREFORMAL'   ];
      $evaDREC=$ROW['evaDRECEPTIVO'   ];
      $evaDRES=$ROW['evaDRESOLUTIVO'  ];
      $evaDAUT=$ROW['evaDAUTONOMO'    ];
      $evaDEST=$ROW['evaDESTRATEGICO' ];
      $evaPPRE=$ROW['evaPPREFORMAL'   ];
      $evaPREC=$ROW['evaPRECEPTIVO'   ];
      $evaPRES=$ROW['evaPRESOLUTIVO'  ];
      $evaPAUT=$ROW['evaPAUTONOMO'    ];
      $evaPEST=$ROW['evaPESTRATEGICO' ];
    
      $SESION =array('ID'       =>$ROW['sesID'],
                     'NOMBRE'   =>$ROW['sesNOMBRE'],
                     'ACTIVIDAD'=>$ROW['sesACTIVIDAD'],
                     'PERSONAJE'=>$ROW['sesPERSONAJE'],
                     'ACCION'   =>$ROW['sesACCION'],
                     'TIEMPO'   =>$ROW['sesTIEMPO']);
      $SESIONES=array();
      $SESIONES[]=$SESION;
     }
     if($secID<>$ROW['secID']){
    //  $SECUENCIAS[]=array('ID'          =>$secID,
      $SECUENCIAS=array('ID'          =>$secID,
                          'NOMBRE'      =>$secNOM,
                          'PROBLEMA'    =>$secPRO,
                          'INCENTIVO'   =>$secINC,
                          'EVALUACIONES'=>$EVALUACIONES);
      $EVALUACIONES="";
      $secID =$ROW['secID' ];
      $secNOM=$ROW['secNOMBRE'];
      $secPRO=$ROW['secPROBLEMA'];
      $secINC=$ROW['secINCENTIVO'];
      $SESION =array('ID'       =>$ROW['sesID'],
                     'NOMBRE'   =>$ROW['sesNOMBRE'],
                     'ACTIVIDAD'=>$ROW['sesACTIVIDAD'],
                     'PERSONAJE'=>$ROW['sesPERSONAJE'],
                     'ACCION'   =>$ROW['sesACCION'],
                     'TIEMPO'   =>$ROW['sesTIEMPO']);
      $SESIONES=array();
      $SESIONES[]=$SESION;
     }
     if($temID<>$ROW['temID']){
      $TEMAS["TEM".++$temNUM]=array('ID'=>$temID,'NOMBRE'=>$temNOM,'SECUENCIAS'=>$SECUENCIAS);
      $SECUENCIAS="";
      $temID =$ROW['temID' ];
      $temNOM=$ROW['temNOMBRE'];
      $SESION =array('ID'       =>$ROW['sesID'],
                     'NOMBRE'   =>$ROW['sesNOMBRE'],
                     'ACTIVIDAD'=>$ROW['sesACTIVIDAD'],
                     'PERSONAJE'=>$ROW['sesPERSONAJE'],
                     'ACCION'   =>$ROW['sesACCION'],
                     'TIEMPO'   =>$ROW['sesTIEMPO']);
      $SESIONES=array();
      $SESIONES[]=$SESION;
     }
    }
    $EVALUACIONES["TEM".++$temNUM]=
    	array(
    		'ID'           =>$evaID,
    		'NOMBRE'       =>$evaNOM,
    		'CRITERIOS'    =>$evaCRI,
    		'INSTRUMENTO'  =>$evaINS,
    		'EVIDENCIAS'   =>$evaEVI,
    		'CONOCIMIENTOS'=>$evaCON,
    
    		'MATERIAL'     =>$evaMAT,
    		'METACOGNICION'=>$evaMET,
    		'PONDERACION'  =>$evaPON,
    		'DPREFORMAL'   =>$evaDPRE,
    		'DRECEPTIVO'   =>$evaDREC,
    		'DRESOLUTIVO'  =>$evaDRES,
    		'DAUTONOMO'    =>$evaDAUT,
    		'DESTRATEGICO' =>$evaDEST,
    		'PPREFORMAL'   =>$evaPPRE,
    		'PRECEPTIVO'   =>$evaPREC,
    		'PRESOLUTIVO'  =>$evaPRES,
    		'PAUTONOMO'    =>$evaPAUT,
    		'PESTRATEGICO' =>$evaPEST,
    
    		'SESIONES'=>$SESIONES
    	);
    
    //$SECUENCIAS[]=array('ID'          =>$secID,
    $SECUENCIAS=array('ID'          =>$secID,
                        'NOMBRE'      =>$secNOM,
                        'PROBLEMA'    =>$secPRO,
                        'INCENTIVO'   =>$secINC,
                        'EVALUACIONES'=>$EVALUACIONES);
    $TEMAS[]=array('ID'        =>$temID,
                   'NOMBRE'    =>$temNOM,
                   'SECUENCIAS'=>$SECUENCIAS);
    
    $Actividades=array(
     "PRESENTACION",
     "NIVELACIÓN DE EXPECTATIVAS",
     "OBJETIVOS",
     "COMPROMISOS",
     "HILO CONDUCTOR",
     "EXPERIENCIA",
     "COMPARTIR",
     "DESCUBRIR",
     "CONECTAR",
     "APLICACIÓN",
     "ACTIVIDADES DE CIERRE",
     "-",
     "-",
     "EVALUACIÓN",
     "METACOGNICIÓN"
    );
    $Actividades[98]="EBNC";
    ?>
    
      Votes: 0 - Link answer
     
  • Date: 16-07-2019 05:15:08 El código está muy complicado... yo te diría que trates de re-armarlo en un modelo de objetos y utilices algo de lazy loading... esas consultas deben ser bastante pesadas...

    Mientras tanto, te recomiendo que utilices un debugger para ver bien el contenido de las variables... podría pasar que algunos de los elementos del arreglo tengan la estructura correcta y otros no...
      Votes: 1 - Link answer
     
  • Date: 16-07-2019 07:06:17 Hola saludos...
    Tu error esta en no verificar si existe la variable, tratas de recorrer algo que no esta como array (osea esta vacio) ya que anteriormente podias tratar las variables a antojo, ahora se pusieron un poco mas apegado a un lenguaje de programacion (Recordemos que PHP es un interprete) y por ello ya no deja el manejo como tal.
    Te recomiendo que antes de cada foreach, verifiques si es arreglo o no. (Por favor si es el caso que no sepas como solo apoyate en un buscador), solo revisa un poco tu codigo y te daras cuenta, ejemplo:
    En alguna linea vi:
    $EVALUACIONES=array(...
    y en otras vi:
    $EVALUACIONES="";

    Asi que al querer recorrer y es en blanco ni siquiera es un array, asi que cambias a array en blanco o al inicio de cada foreach ponle una verificacion de variable o valor.

    Saludos terricola.

    Stryfe™
      Votes: 1 - Link answer
     
  • Date: 16-07-2019 11:59:18 Gracias por sus comentarios.

    El código, ciertamente es complejo, y por eso no quería pasarlo.
    Tampoco es incorrecto porque funciona en versiones anteriores a la 7.1 perfectamente.

    He estado buscando y encuentro que el problema está en la forma en que construyo los arrays, ya que uno de los cambios que me obliga es a NO UTILIZAR EL CONSTRUCTOR array[].

    Estoy experimentando con ARRAY_PUSH() que es el indicado. Creo que finalmente ya me he contestado yo mismo.

    Saludos.
      Votes: 0 - Link answer
     
  • Date: 16-07-2019 12:12:42 Replanteo:

    Este código es crucial para mi despliegue, pero no funciona con versiones de PHP 7.1 y posteriores.
    Considerando que el último elemento del elemento de array asignado, también es un array, ¿cómo puedo dejar de utilizar el constructor [] para agregar un elemento al array?
    	$EVALUACIONES[]=array(
    		'ID'           =>$evaID,
    		'NOMBRE'       =>$evaNOM,
    		'CRITERIOS'    =>$evaCRI,
    		'CONOCIMIENTOS'=>$evaCON,
    		'EVIDENCIAS'   =>$evaEVI,
    		'INSTRUMENTO'  =>$evaINS,
    
    		'MATERIAL'     =>$evaMAT,
    		'METACOGNICION'=>$evaMET,
    		'PONDERACION'  =>$evaPON,
    		'DPREFORMAL'   =>$evaDPRE,
    		'DRECEPTIVO'   =>$evaDREC,
    		'DRESOLUTIVO'  =>$evaDRES,
    		'DAUTONOMO'    =>$evaDAUT,
    		'DESTRATEGICO' =>$evaDEST,
    		'PPREFORMAL'   =>$evaPPRE,
    		'PRECEPTIVO'   =>$evaPREC,
    		'PRESOLUTIVO'  =>$evaPRES,
    		'PAUTONOMO'    =>$evaPAUT,
    		'PESTRATEGICO' =>$evaPEST,
    		'SESIONES'     =>$SESIONES
    	);
    
      Votes: 0 - Link answer
     
  • Date: 17-07-2019 03:25:46 $EVALUACIONES = array(...) .

    No necesita los corchetes, es un error de sintaxis, si versiones anteriores lo aceptan, quizás php 7 no.
      Votes: 0 - Link answer
     
  • Date: 17-07-2019 05:18:29 No necesariamente es un error... si la variable $EVALUACIONES ya fue inicializada como un array no hay problema con eso, simplemente crearía un nuevo elemento en el array $EVALUACIONES cuyo contenido sería un array con toda la estructura que está en la llamada a array().

    ¿No será ese el problema? Probá inicializar $EVALUACIONES = [] antes de hacer la asignación que estás haciendo.
      Votes: 0 - Link answer
     
  • Date: 17-07-2019 05:56:50 Cierto Mauro, si se usa $evaluaciones[] = ... se añaden elementos al array.   Votes: 1 - Link answer
     
  • Date: 17-07-2019 08:17:11 Antes de la asignación existe la línea $EVALUACIONES=array ();
    El preprocesador indica que no puedo utilizar $EVALUACIONES []=...
    Esto a partir de la 7.1
      Votes: 0 - Link answer
     
  • Date: 17-07-2019 12:39:11 Buenas.

    Hasta donde yo sé:

    $evaluaciones = array(); // Declaras/asignas elementos al array. Lo sobreescribe si ya está definido.
    $evaluaciones[] = 'Otro elemento'; // Añades un nuevo elemento con índice numeríco al final del array.
    $evaluaciones[] = array(); // Lo que estás haciendo es añadir un nuevo elemento como array, es decir un subarray.
      Votes: 1 - Link answer
     
  • Date: 17-07-2019 17:38:21 En efecto. Estoy agregando como elemento a un array que tiene elementos simples y un array. Y funciona con la 7.0.

    Revisando, el operador $variable[] para agregar un elemento, como tal SI ES SOPORTADO, por lo que el problema está al agregar entre los elementos del array, a uno que por sí mismo también lo sea, esto es: $variable[]=array('dato1'=>1,'dato2'=>2, ... , 'dato n'=>_unArray_);

    Para resolver el problema inicial, considero que es necesario resolver el subProblema de "Agregar un Array dentro de un Array, con el método []".

    Agradeceré ideas.

    Saludos.
      Votes: 0 - Link answer
     
  • Date: 18-07-2019 17:57:18 Por fin. Un error en lo complejo del código, y no advertir que $EVALUACIONES="" no es lo mismo que $EVALUACIONES= array(). Dentro de las iteraciones se inicializa esta variable y es lo que ocasionaba el error, pues a la vuelta de la iteración, la variable había dejado de ser un array para ser una cadena, por lo que el constructor [] no era valido.

    Gracias por la compañía en la búsqueda del error.

    Saludos.

    p.d. ¿Cómo termino este hilo?
      Votes: 0 - Link answer
     
  • Date: 19-07-2019 07:35:10 Que bueno que lo hayas podido resolver!

    Para cerrar el hilo cambia el estado de la pregunta a RESUELTA
      Votes: 0 - Link answer
     
  • Date: 19-07-2019 08:05:57 Ja!
    Es lo que te dije... jajaja, te pasas...
    Pon como resuelta...
    Saludos...
    Stryfe™
      Votes: 1 - Link answer
     
  • Date: 19-07-2019 10:13:13 Buenas tardes, te paso un ejemplo más simple de lo que estas intentado hacer con sintaxis valida para PHP 7.2

    $array = array(
        'numero1' => array(
            0 => array(
                'nombre' => 'Roberto Nobo',
                'edad' => '39'
            ),
            1 => array(
                'nombre' => 'Carlo Samuel',
                'edad' => '21'
            ),
            2 => array(
                'nombre' => 'Sergio Norberto',
                'edad' => '52'
            ),
        ),
        'numero2' => array(
            0 => array(
                'nombre' => 'Clara Santorino',
                'edad' => '7'
            )
        ),
    );
    
    foreach ($array as $key => $arr) {
        foreach ($array[$key] as $key => $value) {
            echo $key . '|' . $value['nombre'] . '<br>';
        }
    }
    


    No te olvides de usar las $key y que los indices no se definen entre corchetes.

    Espero que te sirva esto.

    Saludos.
      Votes: 1 - Link answer
     
  • Date: 19-07-2019 12:57:47 Entiendo el ejemplo, Carlos Pumas y es precisamente lo que implemento
    foreach($TEMAS AS $LosTemas){
     foreach($LosTemas['SEC'] AS $LasSecuencias){
      foreach($LasSecuencias['EVA'] AS $LasEvaluaciones){
    ...
      }
     }
    }


    Tengo un código para replicar el curso, con todo y temas (varios por curso) secuencias (varias por tema) evaluaciones (varias por secuencia) y sesiones (varias por evaluación), utilizando un solo foreach para una sola consulta, actualizando índices manualmente... todo un show.

    Gracias a todos por sus aportes. Ahora puedo decir que PHP 7.1 resuelve una ambigüedad en el manejo de arrays y strings, razón por la cual el código era correcto para las anteriores aunque sintácticamente tuviera el error que ya mencioné.

    Saludos.
      Votes: 0 - Link answer
     
  • Date: 20-07-2019 01:09:29 Hola Víctor, pues una de las cosas fundamentales es que el código sea claro y fácil de leer, aunque solo sea para tí.

    Yo si lo veo más claro primero declaro el subarray y después lo asigno al principal: $array['indice'] = $subarray;

    Si son muchos datos nada más asignarlo haces unset($subarray).

    Y tampoco usas convenciones de nombres, las mayúsculas son para CONSTANTES. Para las variables deberías usar $lower_case o $camelCase, (y no mezclarlos). Esto te puede dar muchos quebraderos si trabajas en local en Windows y luego el servidor es Linux, que sí distingue entre mayúsculas y minúsculas.
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com