我有以下JSON数组,在这种情况下它只有三个条目,但也可能有更多。
[
{
"id": 45,
"text": "apple"
},
{
"id": 37,
"text": "pear"
},
{
"id": 22,
"text": "strawberry"
}
]
现在我的问题是:如何在PHP中获取条目的text
变量(例如)id
为37
?是否有可能轻松搞定?
我所知道的:我可以使用for循环来查找这样的文本(在PHP中):
<?php
$fruits = json_decode(file_get_contents("file.json"), true); // First I decode the file
for ($i = 0; $i < count($fruits); $i++) {
// Using this for loop and if condition, I get the text I need
if ($fruits[$i]['id'] == 37) echo $fruits[$i]['text'];
}
?>
但是我不想使用for循环,因为我的JSON数组有超过3个条目,如果我在短时间内请求大量数据,则for循环遍历每个条目需要很长时间。那么有更有效的方法来获得相同的结果吗?有人可以用PHP解释一下吗?
答案 0 :(得分:1)
array_filter()
的解决方案:
$yourEntry = current(array_filter($jsonArray, function(\stdClass $entry) {
return ($entry->id == 37);
}));
答案 1 :(得分:0)
更改此代码:
<?php
$fruits = json_decode(file_get_contents("file.json"), true); // First I decode the file
for ($i = 0; $i < count($fruits); $i++) {
// Using this for loop and if condition, I get the text I need
if ($fruits[$i]['id'] == 37) echo $fruits[$i]['text'];
}
?>
到
<?php
$fruits = json_decode(file_get_contents("file.json"), true); // First I decode the file
foreach ($fruits as $fruit) {
// Using this for loop and if condition, I get the text I need
if ($fruits['id'] == 37) {
echo $fruits['text'];
//rest of your code you like to add
}
}
?>
如果你打算只使用for循环,那么使用下面的代码:
<?php
$fruits = json_decode(file_get_contents("file.json"), true); // First I decode the file
for ($i = 0; $i < count($fruits); $i++) {
// Using this for loop and if condition, I get the text I need
if ($fruits['id'] == 37) {
echo $fruits['text'];
//rest of your code you like to add
}
}
?>
答案 2 :(得分:0)
答案 3 :(得分:0)
如果你可以改变你的json结构,那么就有可能。
如果你像这样创建json
{
"45":{
"text": "apple"
},
"37":{
"text": "pear"
},
"22":{
"text": "strawberry"
}
}
并在php中
echo $item['37']['text'];
这将有助于:)
答案 4 :(得分:0)
您是否掌控了json数据结构?如果是这样,您可以通过数组键更改为访问权限,例如
{
'37': 'pear',
'45': 'apple',
'22': 'strawberry'
}
$ fruits = json_decode(file_get_contents(“file.json”),true);
echo $ fruits ['37']; //梨