entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Error usando preg_match_all() en un Array

Busco ayuda para resolver el mensaje:

Notice: Array to string conversion in

Estoy usando el siguiente código para sacar información de la variable $response en este caso access_token y id como pueden ver esos valores se repiten por eso uso preg_match_all

<?php
 $response = '{"data":[{"access_token":"EAAby7f21xKABALPCThZC63i4LZAHZC7MaYbQ0E5gN","id":"515968102105625"},{"access_token":"EAAby7f21xKABAK0zyfHCVNBE0Nn3g1XZCWuXzZA4T","id":"1338263602879836"}],"paging":{"cursors":{"before":"NTE1OTY4MTAyMTA1NjI1","after":"MTMzODI2MzYwMjg3OTgzNgZDZD"}}}';

    if (preg_match_all('#"access_token":[^"]*"([^"]*)"#', $response, $datos)) {
        $mp = $datos[1];
    } else {
        $mp = 'error';
    }
    echo $mp;

    ?>

Busco la manera de obtener los access_token de la variable $response
Aveces son muchos pero por alguna razon preg_match_all() no funciona
Espero su ayuda

1 Respuesta

2votos

magarzon Puntos22080

Hola.

La respuesta que te da preg_match_all en $datos es un array multidimensional. Esto quiere decir que en $datos[1] tienes un array, no un string, por eso te da el error.

En $datos[0] tendrias un array con todas las cadenas que coinciden con el patrón concreto. Por ejemplo en tu caso $datos[0] contiene un array de dos elementos:

0   =>  "access_token":"EAAby7f21xKABALPCThZC63i4LZAHZC7MaYbQ0E5gN"
1   =>  "access_token":"EAAby7f21xKABAK0zyfHCVNBE0Nn3g1XZCWuXzZA4T"

En $datos[1] tendrías un array con las cadenas coincidentes con lo que va entre paréntesis en tu patrón, en este caso, otro array de dos elementos:

0   =>  EAAby7f21xKABALPCThZC63i4LZAHZC7MaYbQ0E5gN
1   =>  EAAby7f21xKABAK0zyfHCVNBE0Nn3g1XZCWuXzZA4T

Por tanto, tu código funciona, solo tienes que manejar la respuesta de forma adecuada.

De todas formas,ya que estás trabajando con json, yo también haría una medición de cuánto tarda tu solución frente a otra en la que obtengas un array con json_decode y después recorras ese array obteniendo los valores. Las expresiones regulares no son precisamente la solución de más rendimiento, sobre todo si tu cadena se complica y es más grande.

Leonardo-Tadei comentado Nov 18

+1 a usar las funciones propias de PHP para procesar JSON: además de que hacerlo a mano es una complejidad innecesaria, cada vez que tengas una estructura no contemplada como contenido del JSON tendrás que ampliar la expresión regular...

Botxtrem-Solutions comentado Nov 18

intentando tu respuesta igual me da el error

<?php
$response = '{"data":[{"access_token":"EAAby7f21xKABALPCThZC63i4LZAHZC7MaYbQ0E5gN","id":"515968102105625"},{"access_token":"EAAby7f21xKABAK0zyfHCVNBE0Nn3g1XZCWuXzZA4T","id":"1338263602879836"}],"paging":{"cursors":{"before":"NTE1OTY4MTAyMTA1NjI1","after":"MTMzODI2MzYwMjg3OTgzNgZDZD"}}}';

if (preg_match_all('#"access_token":[^"]*"([^"]*)"#', $response, $datos)) {
    $mp = $datos[0];
} else {
    $mp = 'error';
}

echo $mp;
?> 

Notice: Array to string conversion in /in/YdY78 on line 10 Array

magarzon comentado Nov 19

Es que yo no te dije que obtuvieras el $datos[0], te dije que en el 0 tenías unos datos y en el 1 otros, pero que en ambos casos es una array que tienes que recorrer, lee de nuevo mi respuesta

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

  • rach ganó una medalla hace 22 horas

    Buena Pregunta - Recibió +1 votos en pregunta
  • Vivi ganó una medalla hace 6 días

    Club de los 100 - Recibió un total de 100 puntos
  • kevin1998 ganó una medalla Dic 6

    Club de los 100 - Recibió un total de 100 puntos
  • Toren23 ganó una medalla Dic 6

    Fotogénico - Subió un avatar
  • Toren23 ganó una medalla Dic 6

    Club de los 100 - Recibió un total de 100 puntos
  • jextrada ganó una medalla Dic 6

    Club de los 100 - Recibió un total de 100 puntos
  • jvelasquez7 ganó una medalla Dic 5

    Club de los 100 - Recibió un total de 100 puntos
  • Azael ganó una medalla Dic 5

    Club de los 100 - Recibió un total de 100 puntos
  • nelsonamaya ganó una medalla Dic 5

    Fotogénico - Subió un avatar
...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta