0

Buenas tengo el siguiente array con sus objetos:

  $PruebaArray = [
        "resultCount" => 1, 
        "results" => [
             {
           "artist" => $Artist,
           "title" => $Title,
           "album" => $Album,
           
     } 
      ] 
 ]; 

Y en desde otra pagina , quiero leerlo e imprimirlo cada valor en un pagina.php El problema que tengo esque no eh logrado imprimir cada dato , me genera un error .

Mi pagina en la que trato de extraer e imprimir los datos tiene lo siguiente:

$data = "http://localhost/prueba/search.php?query=texto1-texto2";
$items = json_decode(file_get_contents($data));

$artist = $items->results->artist;

echo($artist);

Y solo me pone este error:

Warning: Attempt to read property "artist" on array in C:\xampp\htdocs\search\index.php on line 4

No llega a leer el valor de la propiedad . Que podría estar pasando?

Nuevo colaborador
Jamie es un usuario nuevo en el sitio. Tenlo en cuenta cuando preguntes por aclaraciones, comentes o respondas. Revisa nuestro Código de conducta.
1
  • Te está diciendo que lo que hay en ->results es un array. Si dicho array tiene un solo elemento, puedes hacer esto: $artist = $items->results[0]->artist; Si tiene más de un elemento, puedes recorrerlo dentro de un bucle para imprimir los diferentes elementos del mismo. Por favor, por un var_dump($items); y dinos qué muestra para saber cómo está estructurado el objeto.
    – A. Cedano
    Commented el 4 jul. a las 20:41

1 respuesta 1

0

Te está diciendo que lo que hay en ->results es un array. Si dicho array tiene un solo elemento, puedes hacer esto:

$artist = $items->results[0]->artist;

Por ejemplo, simulando tus datos:

$data = [
        "resultCount" => 1, 
        "results" => [
            [
               "artist" => 'Artist 1',
               "title" => 'Title 1',
               "album" => 'Album 1',
            ]
        ] 
]; 

$items=json_decode(json_encode($data),false);
$artist = $items->results[0]->artist;
echo $artist;

Salida:

Artist 1

Lo que ha ocurrido es que al poner results[0] habríamos accedido al único objeto que tendría el array y a su propiedad artist.


Si hubiera varias artistas, puedes recorrerlo con un bucle, por ejemplo:

$data = [
        "resultCount" => 1, 
        "results" => [
            [
               "artist" => 'Artist 1',
               "title" => 'Title 1',
               "album" => 'Album 1',
            ],
            [
               "artist" => 'Artist 2',
               "title" => 'Title 2',
               "album" => 'Album 2',
            ]            
        ] 
]; 

$items=json_decode(json_encode($data),false);

foreach ($items->results as $result) 
{
    foreach (get_object_vars($result) as $key => $value) 
    {
        printf("%s : %s %s",$key,$value,PHP_EOL);
    }
        echo PHP_EOL;
}

Salida:

artist : Artist 1 
title : Title 1 
album : Album 1 

artist : Artist 2 
title : Title 2 
album : Album 2 

Aquí, por conveniencia, hemos usado get_object_vars() para acceder a todas las propiedades de los objetos del array e imprimirlas. Si quieres lo puedes hacer también manual, cuya ventaja es poder imprimir sólo aquellas propiedades que te interesen, por ejemplo:

foreach ($items->results as $result) 
{
    printf("%s, %s %s",$result->artist,$result->title,PHP_EOL);
}

Salida:

Artist 1, Title 1 
Artist 2, Title 2 

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.