es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error fatal al usar foreach en el tercer array.

Estoy obteniendo un error al intentar usar foreach en el tercer array.

{
  "prefix": "_country-",
  "countries": [
    {
      "code": "al",
      "name": "Albania",
      "cities": {
        "prefix": "_city-",
        "options": [
          {
            "code": "durres"
          },
          {
            "code": "tirana"
          }
        ]
      }
    },
    {
      "code": "dz",
      "name": "Algeria",
      "cities": {
        "prefix": "_city-",
        "options": [
          {
            "code": "algiers"
          },
          {
            "code": "oran"
          }
        ]
      }
    }
  ]
}

Mi objetivo es obtener esos datos anteriores y espero que se repita hasta su último dato usando este código:

foreach($countryarr1['countries'] as $countkey1 => $countname1){ ?> <br><br> <?php 
  foreach($countname1['cities'] as $cntrykey2 => $cntrys){
    foreach($cntrys['options'] as $optionskey1 => $optionsarr1){
      var_dump($optionsarr1);
    }
  }
}

Devuelve este error:

Fatal error: Uncaught TypeError: Cannot access offset of type string on string in 
C:\xampp\htdocs\homepage\countries.php:25 Stack trace: #0 {main} thrown in 
C:\xampp\htdocs\homepage\countries.php on line 25

Aquí está la línea 25:

Error en la línea 25

¿Me falta algo? Por cierto, estoy trabajando en un panel de control de proxy para un sitio web.

Aquí está la prueba de que cuando solo tenía 2 arrays no había problemas:

foreach para 2 arrays

Salida sin errores

Ahora, cuando agrego otro foreach en el tercer array y así sucesivamente, aparece el error. Aquí lo tienes:

foreach para el tercer array

Y el error error

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según el mensaje de error, parece que el problema está en tratar de acceder a un desplazamiento de tipo cadena en una cadena. Mirando tu código, parece que el problema está en el segundo bucle foreach para $cntrys.

    En lugar de iterar a través de $cntrys en sí, debes acceder directamente a la clave 'options' de esta manera:

    foreach($countname1['cities']['options'] as $optionskey1 => $optionsarr1){
        var_dump($optionsarr1);
    }
    

    De esta manera, estás accediendo directamente al arreglo 'options' dentro del objeto cities, en lugar de intentar iterar a través del objeto mismo, lo cual está causando el error.

    Una vez que realices este cambio, el bucle foreach debería funcionar como se espera e iterar a través de todos los arreglos 'options' dentro de cada objeto país/ciudad.

Comments are closed.