[PHP] Acceder a valor de array

miguelaje

Hola, estoy llamando a una api que me devuelve este array

Array ( [status] => ok [results_time] => 0.0974 sec. [results_count] => 1 [results] => Array ( [24549702] => Array ( [post_id] => 24549702 [post_site] => domain.com [task_id] => 2986838289 [status] => ok ) ) )

Necesito meter en una variable el valor del [post_id] la cuestión es que el Array ( [24549702] .. ese número cambia en cada petición y me estoy liando de lo lindo. Suelo trabajar poco en php y no doy la tecla. ¿alguna ayudita please? gracias

Troyer

Toma anda:

http://sandbox.onlinephpfunctions.com/code/179174c6371e5d2325474b6141932a1999510ddb

<?php

$arr = Array (
"status" => 'ok',
"results_time" => '0.0974 sec.',
"results_count" => 1,
"results" => Array ( 
	24549702 => Array (
		"post_id" => 24549702,
		"post_site" => 'domain.com', 
		"task_id" => 2986838289,
		"status" => 'ok'
		) 
	)
);
              
foreach($arr["results"] as $key => $value) { echo $key; echo " "; echo $value["post_id"]; echo " "; echo $value["post_site"]; echo " "; echo $value["task_id"]; echo " "; echo $value["status"];echo " "; }

Si quieres coger todos los post_id de golpe sin acceder a la array aprovechando que es la misma array key puedes hacer: array_keys($arr['results']) y te devuelve un array con todos los post_id de results.

1 1 respuesta
eXtreM3

#1 #2 si siempre tiene esa estructura la respuesta puedes hacer esto mejor

$arr = Array (
"status" => 'ok',
"results_time" => '0.0974 sec.',
"results_count" => 1,
"results" => Array ( 
	24549702 => Array (
		"post_id" => 24549702,
		"post_site" => 'domain.com', 
		"task_id" => 2986838289,
		"status" => 'ok'
		) 
	)
);
echo key($arr['results']); // pinta 24549702
1
Beavis

Añadir que si usas PHP 7.3 a partir de esta versión tienes disponible una función nueva array_key_first que simplifica extraer la key del primer elemento sin tener que modificar el estado interno del array.

$key     = array_key_first($array["results"]); // 24549702
$post_id = $array['results'][$key]['post_id']; // 24549702

Si el único dato que te interesa es post_id, si te fijas la key es el propio post_id con lo que ya lo tendrías sin necesidad de acceder al campo.

2 1 respuesta
miguelaje

Muchas gracias por la ayuda a todos

B

Si no va a cambiar la estructura no hace falta ni que lo recorras

Con key() obtienes el índice de la posición que contiene el array (24549702) y a partir de ahí como la estructura no cambia puedes hacerlo así (ya que es asociativo)

$arr["results"][key($arr["results"])]["post_id"]

#4 con key() tampoco modificas el array y obtienes el índice

PD: menudos cutres no? deberian devolverte un json

Usuarios habituales