PHP新手(来自C#(。我有一个数组($metaarray(,如果我把json_encode((放到屏幕上,它的值是:
[
{
"measure":"Walking","record":"steps","latestres":"6870","datet":"2022-08-31"
},{
"measure":"","record":"kilograms","latestres":"117","datet":"2022-09-12"
},{
"measure":"","record":"","latestres":null,"datet":"2022-09-12"
},{
"measure":"Walking","record":"steps","latestres":"6840","datet":"2022-09-12"
},{
"measure":"Bodyweight","record":"kilograms","latestres":"92","datet":"2022-09-12"
},{
"measure":"Benchpress","record":"kilograms","latestres":"90","datet":"2022-09-12"
}
]
有没有一种简单的方法可以让我遍历元数组,或者简单地引用一个记录?例如,我通常会做这样的事情:
$latestres = $metaarray[0][2];
应该是";6870〃-然而,当我这样做时,它不会返回任何结果。
有没有一种方法可以很容易地引用上面数组中的特定值(例如,第一个记录、"latestres"或第三个值(?
我不知道这是否对您有帮助,但$data[2]
并不代表数组中的第三项,除非数组恰好是线性创建的(称为列表(。在PHP中,2
实际上是映射(名称/值对(的关键。所以,除非真的有一个索引键,否则你无法访问它。你可以在这里看到我所说的演示。
您可以使用以下答案中的一个技巧来绕过功能/限制:https://stackoverflow.com/a/24825397/231316
function getNthItemFromArray(array $array, int $idx)
{
return $array[array_keys($array)[$idx]];
}
很明显你会增加一些警卫。
正如每个人所指出的,在编码之前,您应该真正从数据开始。然而,假设无论您有什么JSON字符串,您都可以告诉解码器给您一个关联数组,而不是一个对象。把这些放在一起,你可以做一些类似的事情:
$json = <<<EOT
[
{
"measure":"Walking","record":"steps","latestres":"6870","datet":"2022-08-31"
},{
"measure":"","record":"kilograms","latestres":"117","datet":"2022-09-12"
},{
"measure":"","record":"","latestres":null,"datet":"2022-09-12"
},{
"measure":"Walking","record":"steps","latestres":"6840","datet":"2022-09-12"
},{
"measure":"Bodyweight","record":"kilograms","latestres":"92","datet":"2022-09-12"
},{
"measure":"Benchpress","record":"kilograms","latestres":"90","datet":"2022-09-12"
}
]
EOT;
$decoded = json_decode($json, true);
echo getNthItemFromArray($decoded[0], 2);
function getNthItemFromArray(array $array, int $idx)
{
return $array[array_keys($array)[$idx]];
}
此处演示:https://3v4l.org/POdma