JSON:获得具有特定价值的条目

时间:2015-05-18 06:46:38

标签: php json

我有以下JSON数组,在这种情况下它只有三个条目,但也可能有更多。

[
    {
        "id": 45,
        "text": "apple"
    },
    {
        "id": 37,
        "text": "pear"
    },
    {
        "id": 22,
        "text": "strawberry"
    }
]

现在我的问题是:如何在PHP中获取条目的text变量(例如)id37?是否有可能轻松搞定?

我所知道的:我可以使用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解释一下吗?

5 个答案:

答案 0 :(得分:1)

array_filter()的解决方案:

$yourEntry = current(array_filter($jsonArray, function(\stdClass $entry) {
    return ($entry->id == 37);
}));

See the example

答案 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)

你可以这样做:

foreach($fruits as $item) {
    if($item['id'] == 37) { echo $item['text']; break; }
}

Example

答案 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']; //梨